Cocos2dx:如何阻止CCFollow移动ParallaxNode并使背景变黑

时间:2013-04-19 21:23:26

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

我正在尝试使用CCFollow关注我的heroSprite,但是有两种不稳定的行为正在发生。

我按照我的精灵制作相机如下:

  

startSprite = CCSprite :: createWithSpriteFrameName(“santa_001.png”);   startSprite-> setPosition(ccp(size.width / 5,size.height / 2));   这 - >的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(255255255255);

  

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

它解决了我的问题。我仍然希望解决答案部分a。

1 个答案:

答案 0 :(得分:1)

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

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

对于b,我怀疑你的主“init”是CCLayer,而不是CCLayerColor。只需将您继承的子类更改为CCLayerColor,并将新的init更改为:

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

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

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

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