在没有从CGPath开始的情况下使用SKAction进行CGPath之后

时间:2014-06-15 22:48:32

标签: cocoa-touch sprite-kit swift cgpath skaction

我有一个表示椭圆的SKShape节点。玩家被放置在贝塞尔路径的当前点上,该路径基于椭圆的CGPath:

enter image description here

我有两个玩家节点可以执行的动作。玩家可以顺时针或逆时针跟随路径。

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

当我开始其中一项操作时:

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

玩家沿着适当的路径和方向移动。当我停止其中一个动作时:

player.removeActionForKey("ClockwiseRotation")

玩家停在上一次移动到的路径上。我希望能够从玩家的当前点开始任何一个动作,并遵循相同的路径,但是现在,如果我再次启动其中一个动作(在动作已经开始并停止之后) )玩家跳转到图片中所示的相同起点并沿着那里的路径前进。如何让玩家从它已经存在的位置开始遵循路径?

1 个答案:

答案 0 :(得分: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];