繁体   English   中英

使用自定义SKAction的EaseOut操作

[英]EaseOut action with custom SKAction

我有以下自定义SKAction工作,但作为EaseIn而不是EaseOut。 我想要它EaseOut! 我使用在网络上找到的各种缓动方程式来纠正它是惨不忍睹的。

    let duration = 2.0
    let initialX = cameraNode.position.x
    let customEaseOut = SKAction.customActionWithDuration(duration, actionBlock: {node, elapsedTime in

        let t = Double(elapsedTime)/duration
        let b = Double(initialX)
        let c = Double(targetPoint.x)
        let p = t*t*t*t*t

        let l = b*(1-p) + c*p

        node.position.x = CGFloat(l)
    })

    cameraNode.runAction(customEaseOut)

任何帮助都会非常感激。

谢谢

你不需要计算它。

SKAction只有一个名为timingMode的属性:

// fall is an SKAction
fall.timingMode = .easeInEaseOut

您可以选择:

  • 线性的(默认)
  • easeIn
  • easeOut
  • easeInEaseOut

查看API文档中的详细信息以及此处

如果您需要更改Apple预设,可以使用: timingFunction

fall.timingFunction = { time -> Float in
    return time
}

要根据源构建自定义函数:

/**
 A custom timing function for SKActions. Input time will be linear 0.0-1.0
 over the duration of the action. Return values must be 0.0-1.0 and increasing
 and the function must return 1.0 when the input time reaches 1.0.
 */
public typealias SKActionTimingFunction = (Float) -> Float

所以使用这些信息你可以写:

func CubicEaseOut(_ t:Float)->Float
{
   let f:Float = (t - 1);
   return f * f * f + 1;
}
fall.timingFunction = CubicEaseOut

我们可以修改以下代码以允许自定义操作缓出而不是轻松实现

let t = Double(elapsedTime)/duration
...
let p = t*t*t*t*t

为了更好地理解p ,将其绘制为t的函数是有帮助的

在此输入图像描述

显然,该功能随着时间的推移而缓和。 t的定义更改为

let t = 1 - Double(elapsedTime)/duration

并绘制p给出

在此输入图像描述

该操作现在缓和,但从1开始到0结束。要解决此问题,请将p的定义更改为

let p = 1-t*t*t*t*t

在此输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM