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

标签 ios iphone swift

是否可以通过SKAction.followPath来改变物体移动的速度?例如,假设我们使用下面的代码让球沿着矩形路径移动。该代码将在整个路径中使用恒定速度。但是如果我们想改变物体沿着矩形的速度怎么办?

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

有效地让球沿着由不同速度的单独线构成的矩形路径(而不是一条路径)构建是唯一的选择吗?

谢谢!

最佳答案

有两种方法可以实现这一点。

第一种方式:

您可以使用SKAction.speedBy。您可以将 SKAction.speedBy 与您的 followPath 分组。示例:

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

现在球将在 2.5 秒内达到 4 倍的速度。 注意:现在我们不会遵守 followPath 持续时间。随着时间的推移,我们正在增加 Sprite 的速度。它将在 2.5 秒内到达目的地。

第二种方式:

另一种方法是使用计时函数。这可能是更好的方法,因为我们可以更好地控制动画期间球的移动速度。

示例:

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

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

movingBall.runAction(goPath)

计时函数的工作方式是,它为您提供一个将当前耗时作为 float 的 block 。您的工作是使用某种计算来修改传入的值,然后返回它。

我只是对进入函数的时间进行立方并返回它。这使得球开始时非常慢,然后在动画结束时非常快地加速。

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

关于ios - 通过 SkAction.followPath 改变对象移动的速度(iOS),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28889325/

相关文章:

iOS 从 subview 访问父 View 元素

ios - 如何将单元格添加到静态部分 UITableView?

ios - 如何在代码中创建具有两个尺寸类的 UITraitCollection?

iphone - 为 NSManagedObject 的属性设置值后保存时 CoreData 崩溃

SwiftUI:支持多种模式

ios - AVQueuePlayer-在缓冲项目时保持事件状态

ios - 横向启动图像支持

iphone - 使图像仅遵循 CGPath 的一部分

ios - Swift 按钮框架高度问题 (viewDidLayoutSubviews)

ios - 在实际查看 View Controller 中显示警报