Swift: 改变 moveTo SKAction 的速度

Swift: change speed of a moveTo SKAction

我有一个简单的 sprite 移动,我用以下行触发:

   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 移动精灵,我可以用它来改变精灵在移动过程中的速度?

您无法更改动作本身的速度,因为 SKAction 对象是 "fire and forget" 并且可重复使用 — 一旦您将一个对象传递给节点的 runAction 方法,您所做的对该动作实例不再影响节点对 运行 动作所做的事情。

但这里还有一些其他选项。

  1. 改变speed property of the node being animated. You can do this either directly or by running a speedBy or speedTo动作。这个 属性 是一个乘数,它会改变节点 运行 对其附加的任何和所有操作的速度,因此您可以将其设置为低于 1.0 以减慢正在发生的事情,或高于 1.0 加快速度。

  2. 使用定期运行出块的custom action更直接地控制节点;在该块中,您可以直接设置节点的位置,并且可以检查外部状态以确定每个时间间隔是否移动模式更多或更少。

  3. 在场景(或场景委托)update 循环期间直接控制节点的位置,此时您可以随心所欲地控制每帧的移动量。

使用物理代替动作:

设置到达目的地的速度。

在你的目的地创建一个关节,将你的物体连接到目的地,具有阻尼和响应频率。您可以在到达时或最初设置此设置。最初设置它,频率足够强,你不需要设置初始速度,它会 "attracted" 到达目的地足够强,可以为你做所有的动画。

在旅途中的任何一点,您都可以调整频率并向移动物体施加其他力以使其减速或加速。