我有一个简单的精灵运动,我用下面一行触发:
actionMove = SKAction.moveTo(CGPoint(x: size.width + CGFloat(KUGELWIDTH / 2), y: yPos), duration: NSTimeInterval(actualDuration))
然后我以下列方式致电runAction
:
let actionMoveDone = SKAction.removeFromParent()
kugel.runAction(SKAction.sequence([actionMove, actionMoveDone]))
我感到困惑的是,在SKAction
正在运行的中间,正在改变Scene
的速度(持续时间)。这可能是不可能的,在这种情况下,还有另一种方法可以调用我的{{1}}周围的精灵来移动精灵,我可以在它的运动中间改变精灵的速度吗?
答案 0 :(得分:5)
你无法改变动作本身的速度,因为SKAction
对象是"火与忘记"并且可重复使用 - 一旦将一个方法传递给节点的runAction
方法,您对该操作实例所做的操作将不再影响节点执行操作的操作。
但这里还有其他一些选择。
更改正在设置动画的节点的speed
属性。您可以直接执行此操作,也可以执行speedBy
或speedTo
操作。此属性是一个乘数,用于更改该节点运行的任何行为以及与其关联的所有操作的速度,因此您可以将其设置为1.0
以下,以减慢正在进行的任务或1.0
以上加快速度。
使用定期运行块的custom action更直接地控制节点;在该块中,您可以直接设置节点的位置,并且可以检查外部状态以确定是否每个时间间隔或多或少地移动模式。
在场景(或场景委托)update
循环中直接控制节点的位置,此时您可以控制每帧的移动量但是你喜欢。
答案 1 :(得分:0)
使用Physics代替Actions:
将速度设置为目的地。
在您的目的地创建一个关节,将您的对象连接到目的地,具有阻尼和响应频率。您可以在抵达时或最初设置此项。最初设置它,频率足够强,你不需要设置初始速度,它将被“吸引”到目的地,足以为你做所有的动画。
在行程的任何一点,你都可以调整频率并在移动物体上施加其他力量来减慢或加速它。