【问题标题】:Swift: change speed of a moveTo SKActionSwift:改变 moveTo SKAction 的速度
【发布时间】:2016-09-25 21:41:41
【问题描述】:

我有一个简单的精灵运动,我用以下行触发:

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

【问题讨论】:

    标签: swift skaction


    【解决方案1】:

    您无法更改动作本身的速度,因为SKAction 对象是“即发即弃”且可重复使用的——一旦您将一个对象传递给节点的runAction 方法,您对该动作实例所做的操作就不再影响节点正在执行的操作以运行操作。

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

    1. 更改动画节点的speed 属性。您可以直接执行此操作,也可以通过运行speedByspeedTo 操作来执行此操作。该属性是一个乘数,可以改变节点运行附加到它的所有动作的速度,因此您可以将其设置为低于1.0 以减慢正在发生的事情,或高于1.0 以加快速度。

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

    3. 在您的场景(或场景代理)update 循环期间直接控制节点的位置,此时您可以随意控制每帧的移动量。

    【讨论】:

    • "更改正在动画的节点的速度属性" - 这是否意味着速度属性可以在每帧的 update() 中以曲线速率更改,并创建非常时髦的坡道、缓动和利率变化效应?
    • @Confused:我相信。试试看!
    • 谢谢!潜力正在展开……现在……编码……当我弄清楚如何利用这一点时,我会在十年左右的时间里报告。
    【解决方案2】:

    使用物理代替动作:

    设置到达目的地的速度。

    在您的目的地创建一个关节,将您的对象连接到目的地,具有阻尼和响应频率。您可以在抵达时或最初设置此设置。初始设置它,频率足够强,您不需要设置初始速度,它会被足够强地“吸引”到目的地,为您完成所有动画。

    在旅途中的任何时候,您都可以调整频率并在移动物体上施加其他力来减慢或加速它。

    【讨论】:

    • 你能举个例子吗?
    猜你喜欢
    • 2015-10-08
    • 1970-01-01
    • 2014-03-23
    • 2016-10-28
    • 2013-03-25
    • 2017-06-08
    • 2017-12-14
    • 1970-01-01
    • 2014-05-12
    相关资源
    最近更新 更多