使用自定义 SKAction 的 EaseOut 动作
EaseOut action with custom SKAction
我有以下自定义 SKAction 工作,但作为 EaseIn 而不是 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
您可以选择:
- 线性(默认)
- 缓入
- easeOut
- 缓入缓出
查看 API docs and also here 的详细信息。
如果您需要更改 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
我有以下自定义 SKAction 工作,但作为 EaseIn 而不是 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
您可以选择:
- 线性(默认)
- 缓入
- easeOut
- 缓入缓出
查看 API docs and also here 的详细信息。
如果您需要更改 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