当有多个图层时,Cocos2d CCFollow

时间:2013-03-30 03:40:15

标签: iphone ios objective-c cocos2d-iphone

基本上,当我有一个CCLayer用于背景和平台精灵而另一个用于玩家精灵和HUD时,如果我希望我的相机始终以玩家为中心,我应该如何调用CCFollow同一层中的HUD也相应地移动了吗?

现在,背景图层是CCLayer的子类,其中CCSpriteBatchNode用于绘制环境中的对象。它包含一个实例变量CCLayer *HudLayer,其中包含CCMenu和另一个CCSpriteBatchNode的播放器动画精灵。他们都是CCScene的直接子女,这意味着HudLayer不是BackgroundLayer的孩子。我现在将CCFollow称为[self runAction:[CCFollow actionWithTarget:playerSprite worldBoundary:worldRect]],其中selfBackgroundLayer

摄像机正确跟随播放器的box2d物理体,菜单也随之移动,但每当摄像机移动时,让我们说向右,播放器精灵向右移动两倍,离开物理体背后。因此,向右移动一点后,playerSprite就在屏幕之外。 playerSprite.posplayerSprite.position似乎没有任何错误。

我试过在不同的地方调用CCFollow,但是HUD拒绝移动或者相机不会移动或者玩家奇怪地移动。怎么了?

1 个答案:

答案 0 :(得分:0)

我想出来了!这里的关键是将播放器精灵放在除HUD层之外的某个层中。我为CCSpriteBatchNode的孩子添加了我的backgroundLayer作为HudLayer的孩子而不是CCFollow,而没有更改任何其他内容并且有效。

所以基本上所有需要始终保持在屏幕上的因为HUD应该在一个层中,而CCFollow的目标节点应该在一个单独的层中(在我的情况下在后台)。 {{1}}的调用者层应包含目标节点作为直接子节点。本教程对我有很大帮助:http://www.raywenderlich.com/4666/how-to-create-a-hud-layer-with-cocos2d