我有一个动画序列,显示一个接一个的特定帧。原始规格是:
所以我写了这个线性计时功能:
/**
* Get the delay until the next animation frame.
*
* @returns the number of ms until the next animation frame.
*/
getNextTiming: function () {
var n = this.getLength(), // total number of frames
t = this.animationDuration,
x = this.durationDelta, // 20 ms, according to spec
d = ((n * n * x) - (n * x) + (2 * t)) / (2 * n),
c = this.cursor; // current frame
// d is the duration of the first frame of animation.
return d - c * x;
},
当然,艺术家并不开心。他们希望动画遵循曲线。当然,他们并不确切地知道什么是曲线,所以我需要写一些我可以用数字调整的东西,直到他们开心。在我看来,我应该看看立方Bézier函数,但是我能找到的那些函数有抽象符号,我发现很难解析,或者它们被定义为p(t),而不是Δt/Δp。
我曾经擅长数学,但现在我被卡住了。我可以用正确的方向推。如何重写上述功能,以便我可以将立方Bézier控制点P1和P2输入并输出每个连续帧的时间?