0

我正在尝试使用 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) 当 hero 向上移动时,初始化为白色的屏幕会在 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 。

4

1 回答 1

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)。

于 2013-04-19T21:37:25.990 回答