2014-06-15 9 views
4

나는 타원을 나타내는 SKShape 노드를 가지고 있습니다. 플레이어는 타원의 CGPath을 기반으로 베 지어 패스의 현재 위치에 배치됩니다 :CGPath의 시작 부분부터 시작하지 않고 SKAction을 사용하여 CGPath를 따라 간다

enter image description here

내가 선수 노드가 수행 할 수있는 두 가지 작업이있다. 플레이어는 시계 방향 또는 반 시계 방향으로 경로를 따라갈 수 있습니다. 적절한 경로와 방향을 따라

player.runAction(SKAction.repeatActionForever(rotateClockwiseAction), withKey: "ClockwiseRotation") 

플레이어 이동 :

rotateCounterClockwiseAction = SKAction.followPath(counterClockwisePath.CGPath, asOffset: false, orientToPath: true, duration: 1) 
rotateClockwiseAction = SKAction.followPath(clockwisePath.CGPath, asOffset: false, orientToPath: true, duration: 1) 

내가 같이 작업 중 하나를 시작

. 작업 중 하나를 중지하면 :

player.removeActionForKey("ClockwiseRotation") 

플레이어가 마지막으로 이동 한 경로에서 멈 춥니 다. 플레이어의 현재 지점에서 액션 중 하나를 시작하고 동일한 경로를 따라갈 수 있기를 원하지만 현재 액션 중 하나를 다시 시작하면 (액션이 이미 시작되고 중지 된 후) 플레이어가 점프합니다 그림에서 본 것과 같은 시작점으로 이동하여 거기에서부터 경로를 따라갑니다. 플레이어가 이미있는 지점에서 경로를 따라 잡도록하려면 어떻게해야합니까?

+1

새 cgpath, 같은 모양이지만를 작성해야 내가 타원을 보자'내 경로를 생성 – LearnCocos2D

+0

에서 플레이어가되는 지점에서 시작 = SKShapeNode (ellipseOfSize : CGSizeMake (size.0, size.1))'즉. 이 지역에별로 경험이 없습니다. 이 문제를 구체적으로 해결하는 데 도움이되는 자료가 있습니까? – JuJoDi

답변

0

SKNode의 speed 속성을 사용하면 쉽게이 작업을 수행 할 수 있습니다.

작업을 제거하고 다시 만드는 대신 속도 값을 조정하여 작업을 일시 중지했다가 다시 시작할 수 있습니다. 베 지어 경로 애니메이션이 현재 위치에서 다시 시작됩니다.

// Set the player node's speed to 0.0 causing all actions to be paused. 
[playerNode setSpeed:0.0]; 

... 

// Then when you're ready to resume set the player node's speed back to 1.0. 
// This will cause the action to continue from its current position. 
[playerNode setSpeed:1.0]; 
+0

플레이어 노드에 두 개의 동작이 연결되어 있기 때문에이 작업이 수행되지 않습니다. 그는 왼쪽으로 회전하거나 오른쪽으로 회전 할 수 있습니다. 그가 왼쪽으로 회전하고 멈 추면 왼쪽으로 회전을 다시 시작할 수 있지만 오른쪽으로 회전하기 시작하면 경로의 시작 부분에서 시작하거나 마지막으로 회전하는 경로가 일시 중지됩니다. – JuJoDi

+0

나는 알고있다. 그것은 단지 -1 속도로 행동을 따르는 경로를 뒤집을 수 없다는 것이 수치입니다. 그렇게하면 단 한 번의 조치 만 필요합니다. 나는 죄/코사인을 사용하고 현재의 궤도 위치를 추적하는 동작없이 궤도를 작성하는 경향이 있다고 생각합니다. –

+1

저는 원에서 플레이어의 현재 위치를 기반으로 경로를 다시 그려서 그런 식으로 작업했습니다. 경로가 타원 일 때 다시 그리는 것이 어려워요. – JuJoDi