Cocos2d iphone Cocos2D:CCPhysisnode和儿童精灵以不同的速度移动

Cocos2d iphone Cocos2D:CCPhysisnode和儿童精灵以不同的速度移动,cocos2d-iphone,Cocos2d Iphone,我正在按照教程来模仿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

我正在按照教程来模仿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的子节点)以与屏幕上静止的速度向右移动。但是当我在模拟器上运行代码时,英雄精灵就以光速(大约比物理节点的滚动速度快10~20倍)向右飞去了。_physicsNode和它内部的所有其他东西都按预期以正常速度向左滚动

如果我不给英雄任何移动,它通常会和物理节点一起滚动

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

CCAction *moveAction = [CCActionMoveBy actionWithDuration:1 position:ccp(-scrollSpeed,0)];
CCActionRepeatForever *repeatAction = [CCActionRepeatForever actionWithAction:(CCActionInterval *)moveAction];
[_physicsNode runAction:repeatAction];
并且仍然得到相同的结果。英雄接收的速度值始终不同于物理节点接收的速度

有谁能向我解释一下为什么会发生这种情况,以及如何解决?
如果有帮助的话,我正在使用cocos2d3.3。

我终于找到了答案

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

我通过使用CCPositionTypeNormalized对齐SpriteKit上的_英雄,然后在游戏开始时将其切换到CCPositionTypePoints来修复它