Cocos2D:CCPhysicsNode和子精灵以不同的速度移动

时间:2014-12-26 12:53:13

标签: cocos2d-iphone

我正在按照教程here来模仿Flappy Bird。在滚动游戏场景的部分:

- (void)update:(CCTime)delta {
    _hero.position = ccp(_hero.position.x + delta * scrollSpeed, _hero.position.y);
    _physicsNode.position = ccp(_physicsNode.position.x - (scrollSpeed *delta), _physicsNode.position.y);
    ...
}

理想情况下,整个世界将向左滚动,而_hero(这是_physicsNode的子节点)向右移动的速度与屏幕上保持不变的速度相同。但是当我在模拟器上运行代码时,_hero精灵只是以光速向右发射(比_physicsNode的滚动速度快约10~20倍)。 _physicsNode及其中的所有其他内容都按正常速度向左滚动。

如果我不给_hero任何动作,它会正常与_physicsNode一起滚动。

我尝试了其他方法,例如在游戏开始时使用CCAction:

CCAction *moveAction = [CCActionMoveBy actionWithDuration:1 position:ccp(-scrollSpeed,0)];
CCActionRepeatForever *repeatAction = [CCActionRepeatForever actionWithAction:(CCActionInterval *)moveAction];
[_physicsNode runAction:repeatAction];

仍然得到相同的结果。 _hero接收的速度值始终与_physicsNode接收的速度不同。

有人可以向我解释为什么会发生这种情况以及如何解决这个问题? 如果它有帮助,我正在使用cocos2d 3.3。

1 个答案:

答案 0 :(得分:0)

我终于明白了。

_hero节点的positionType设置为CCPositionTypeNormalized(因为我试图将他置于屏幕中心),而_physicNode的positionType为CCPositionTypePoints。对节点位置的任何更改(包括移动操作)都基于节点的positionType。结果是,当我将_hero节点移动2时,它不会移动2个点,而是移动父节点宽度的2%。

我通过使用CCPositionTypeNormalized将SpherKit上的_hero对齐,然后在游戏开始时将其切换为CCPositionTypePoints来修复它。