基本上,当我有一个CCLayer
用于背景和平台精灵而另一个用于玩家精灵和HUD时,如果我希望我的相机始终以玩家为中心,我应该如何调用CCFollow
同一层中的HUD也相应地移动了吗?
现在,背景图层是CCLayer
的子类,其中CCSpriteBatchNode
用于绘制环境中的对象。它包含一个实例变量CCLayer *HudLayer
,其中包含CCMenu
和另一个CCSpriteBatchNode
的播放器动画精灵。他们都是CCScene
的直接子女,这意味着HudLayer
不是BackgroundLayer
的孩子。我现在将CCFollow
称为[self runAction:[CCFollow actionWithTarget:playerSprite worldBoundary:worldRect]]
,其中self
是BackgroundLayer
。
摄像机正确跟随播放器的box2d物理体,菜单也随之移动,但每当摄像机移动时,让我们说向右,播放器精灵向右移动两倍,离开物理体背后。因此,向右移动一点后,playerSprite就在屏幕之外。 playerSprite.pos
和playerSprite.position
似乎没有任何错误。
我试过在不同的地方调用CCFollow
,但是HUD拒绝移动或者相机不会移动或者玩家奇怪地移动。怎么了?
答案 0 :(得分:0)
我想出来了!这里的关键是将播放器精灵放在除HUD层之外的某个层中。我为CCSpriteBatchNode
的孩子添加了我的backgroundLayer
作为HudLayer
的孩子而不是CCFollow
,而没有更改任何其他内容并且有效。
所以基本上所有需要始终保持在屏幕上的因为HUD应该在一个层中,而CCFollow
的目标节点应该在一个单独的层中(在我的情况下在后台)。 {{1}}的调用者层应包含目标节点作为直接子节点。本教程对我有很大帮助:http://www.raywenderlich.com/4666/how-to-create-a-hud-layer-with-cocos2d