【问题标题】:Cocos2dx : How to stop CCFollow moving the ParallaxNode and making background blackCocos2dx:如何停止 CCFollow 移动 ParallaxNode 并使背景变黑
【发布时间】:2013-04-19 21:23:26
【问题描述】:

我正在尝试使用 CCFollow 跟随我的 heroSprite,但是发生了两种不稳定的行为。

我正在让相机跟随我的精灵如下:

startSprite = CCSprite::createWithSpriteFrameName("santa_001.png"); startSprite->setPosition(ccp (size.width / 5 , size.height / 2 )); this->addChild(startSprite,1); this->runAction(CCFollow::create(heroSprite, CCRectMake(0, 0, size.width, size.height * 2)));

现在,发生的事情是:

a) 当 heroSprite 向上跳跃时,由不同精灵组成并以不同速度移动的背景视差节点也在“向上”方向移动。我想让这些精灵保持在原来的位置,而不是随着 heroSprite 向上移动。我该怎么做?

voidNode = CCParallaxNodeExtras::node();

voidNode->addChild(pSpriteGrass, 2, ccp(3.0f,0), ccp(0, size.height/10 - 50) );
voidNode->addChild(pSpriteGrass02, 3, ccp(3.0f,0), ccp(size.width - 10, size.height/10 - 50)); voidNode->addChild(pSprite, 1, ccp(1.0f,0), ccp(0, size.height/10 - 50)); voidNode->addChild(pSprite02, 0, ccp(1.0f,0), ccp(size.width - 10, size.height/10 - 50));

voidNode->addChild(pSpriteSky02, 0, ccp(0.6f,0), ccp(0, size.height /2 + 75) ); voidNode->addChild(pSpriteSky, 1, ccp(0.6f,0), ccp(size.width, size.height /2 + 75) );

voidNode->addChild(pSpriteStars, 2, ccp(2.0f,0), ccp(0, size.height - 110)); voidNode->addChild(pSpriteStars02, 3, ccp(2.0f,0), ccp(size.width - 10, size.height - 110));

voidNode->addChild(pSpriteClouds, 4, ccp(1.2f,0), ccp(0, size.height - 110)); voidNode->addChild(pSpriteClouds02, 5, ccp(1.2f,0), ccp(size.width - 10, size.height - 110) );

CCActionInterval* go = CCMoveBy::create(25, ccp(-1000,0) ); CCSequence* seq = CCSequence::create(go, NULL); voidNode->runAction((CCRepeatForever::create(seq)));

this->addChild( voidNode, 0 );

b) 当英雄向上移动时,初始化为白色的屏幕会在 heroSprite 跳跃时变黑一段时间。当它下来时,屏幕又变白了。如何使屏幕的上方部分也变白?

CC_BREAK_IF(!CCLayerColor::initWithColor(ccc4(255,255,255,255)));

任何建议或指示都会有所帮助。谢谢


B 部分更新:

通过“Smugbit Studios”的建议,我改变了

initWithColor:ccc4(255,255,255,255);

initWithColor(ccc4(255, 255, 255, 255), size.width, size.height * 2);

它解决了我的问题。我仍在寻求解决答案部分 a 的问题。

【问题讨论】:

    标签: c++ windows cocos2d-iphone cocos2d-x


    【解决方案1】:

    对于 a,将 CCFollow 的边界设置为您想要的最大高度 - 在这种情况下,我相信它只是 size.height,所以:

    this->runAction(CCFollow::create(heroSprite, CCRectMake(0, 0, size.width, size.height)));
    

    对于 b,我怀疑“this”的主要初始化是 CCLayer,而不是 CCLayerColor。只需将您的子类更改为 CCLayerColor,并将新的 init 更改为:

    initWithColor:ccc4(255,255,255,255)
    

    编辑:更正答案 B - 您还需要定义图层大小。如果未定义,则将其设置为屏幕大小,但看起来您正试图超出屏幕的高度。在这种情况下,请使用:

    initWithColor(ccc4(255, 255, 255, 255), width, height)
    

    height 是您将显示的最大高度 - 可能是 (size.height*2)。

    【讨论】:

    • 对于你的答案 b),改变 initWithColor:ccc4(255,255,255,255);到 initWithColor(ccc4(255, 255, 255, 255), size.width, size.height * 2);解决了我的问题......但我仍然遇到问题 a),我不需要移动背景精灵来跟随我的 heroSprite..
    • 正如我所提到的,CCFollow 的 CCRectMake 部分定义了以下内容的边界。将其设置为较低的值将防止背景跟随定义的高度。
    • 将其设置为 size.height 或更低,不会使相机跟随精灵 :(
    • 啊,您仍然希望相机跟随,而不是背景。为此,您只需将 y 轴的 voidNode->addChild() 定义更改为 -1:例如,ccp(0.6f,-1.0f)。
    • 并将边界保持在 size.height*2。当图层向上移动时,这将使背景看起来向下移动。
    猜你喜欢
    • 2019-05-17
    • 1970-01-01
    • 2011-02-19
    • 1970-01-01
    • 2010-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多