我正在尝试使用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,将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)。

关于c++ - Cocos2dx:如何停止CCFollow移动ParallaxNode并使背景变黑,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16113695/

10-10 15:57