通过SkAction.followPath(iOS)移动对象的速度变化

时间:2015-03-05 22:47:41

标签: ios iphone swift

是否可以因SKAction.followPath而改变物体移动的速度?例如,假设我们使用下面的代码让球跟随矩形路径。代码将在整个路径中使用恒定速度。但是如果我们想要改变矩形对象的速度呢?

let goPath = SKAction.followPath(ballPath!.CGPath, duration: 2.5)
movingBall.runAction(goPath)

有效控制球的唯一选择是使用由不同速度(与一条路径相对)的单独线条构成的矩形路径吗?

谢谢!

2 个答案:

答案 0 :(得分:3)

实现这一目标的两种方式。

第一种方式:

您可以使用SKAction.speedBy。您可以使用followPath将SKAction.speedBy分组。例如:

    movingBall.runAction(SKAction.group([
        SKAction.followPath(ballPath!.CGPath, duration: 2.5)
        SKAction.speedBy(4, duration: 2.5)
    ]))

现在球将在2.5秒内达到速度的4倍。 注意:现在我们不会遵守followPath期限。随着时间的推移,我们正在提高精灵的速度。它将在不到2.5秒的时间内到达目的地。

第二种方式:

另一种方法是使用计时功能。这可能是更好的方法,因为我们可以更好地控制球在动画过程中移动的速度。

示例:

let goPath = SKAction.followPath(ballPath!.CGPath, duration: 2.5)

goPath.timingFunction = {
    t in
    return powf(t, 3)
}

movingBall.runAction(goPath)

计时功能的工作方式是它为您提供一个具有当前经过时间的块作为浮点数。你的工作是使用某种计算来修改进来的值,然后返回它。

无论什么时候进入函数并返回它,我都只是立方体。这使得球开始非常缓慢,然后在动画结束时非常快速地加速。

你可以获得真正的创造性并使用正弦波使物体反弹等等。请注意,任何返回的值<0都会被忽略。

答案 1 :(得分:1)

使用followPath SKAction,这是不可能的。

您可以做的是使用节点的更新方法手动更新其位置。

这需要一些工作才能让它遵循一条路径,但是你可以做的比SKAction更多。