2014-12-26 3 views
0

Flappy Bird를 모방 한 here 자습서를 따르고 있습니다. (_physicsNode의 자식 노드) 이상적으로 온 세상이 왼쪽으로 스크롤합니다Cocos2D : CCPhysicsNode 및 하위 스프라이트가 다른 속도로 이동합니다.

- (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가 화면에 계속 머물 것 같은 속도로 오른쪽으로 이동 : 부분에서 게임 장면을 스크롤합니다. 하지만 시뮬레이터에서 코드를 실행하면 _hero 스프라이트가 빛의 속도로 오른쪽으로 튀어 오릅니다 (_physicsNode의 스크롤 속도보다 약 10 ~ 20 배 빠름). _physicsNode와 그 안의 다른 것들은 의도 한대로 정상 속도로 왼쪽으로 스크롤됩니다.

_hero에 움직임을주지 않으면 _physicsNode와 함께 정상적으로 스크롤됩니다.

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

을 그리고 여전히 같은 결과를 얻을 :

나는 게임을 시작 CCAction를 사용하여 같은 다른 방법을 시도했다. _hero가받는 속도 값은 _physicsNode가받는 속도와 항상 다릅니다.

아무에게도 왜 이런 일이 일어나고 어떻게 해결할 수 있습니까? 도움이된다면 cocos2d 3.3을 사용하고 있습니다.

답변

0

나는 그것을 마침내 발견했습니다.

_hero 노드는 _physicNode의 positionType이 CCPositionTypePoints 인 반면 _hero 노드의 positionType은 CCPositionTypeNormalized로 설정 되었기 때문에 (화면 중심으로 배치하려고했기 때문에) 노드의 위치 변경 (이동 작업 포함)은 노드의 positionType을 기반으로합니다. 결과는 _hero 노드를 2로 이동할 때 부모 노드의 폭의 2 %이지만 2 %를 이동시키지 않는다는 것입니다.

CCPositionTypeNormalized를 사용하여 SpriteKit에 _hero를 정렬 한 다음 게임 시작시 CCPositionTypePoints로 전환하여 문제를 해결했습니다.