补间是一个视频编辑术语,用于描述动作的简易性。例如,对于电梯,当电梯到达其所需的楼层时,电梯不会全速并且停止。它知道它的底板,底板是什么,以及到达那里需要多长时间。然后它使用该数据来平滑其运动。
我希望能够通过使用补间为我的项目编写这个平滑的动作。
如何执行此操作的方法在http://robertpenner.com/easing/penner_chapter7_tweening.pdf
中列出特别关注pg207-211
本指南解释了什么是补间,然后在Action Script中显示代码。说实话,我觉得有点愚蠢,因为我试图使用提供的示例,但我似乎无法用其他语言复制它,例如c ++,java,javascript或lua。
我不想使用包或插件来编写补间,我想学习如何实际编写补间函数。因此,如果任何具有更好理解能力或编程技巧的人认为他们理解,那么我非常感谢你的解释。
示例动作脚本函数...
Math.easeInQuad = function (t, b, c, d) {
return c*(t/=d)*t + b;
};
Math.easeOutQuad = function (t, b, c, d) {
return -c * (t/=d)*(t-2) + b;
};
Math.easeInOutQuad = function (t, b, c, d) {
if ((t/=d/2) < 1)
return c/2*t*t + b;
return -c/2 * ((--t)*(t-2) - 1) + b;
};
答案 0 :(得分:2)
AS3中的适当补间函数接受Number
的6个参数,最后两个参数默认为0.它应该按如下方式解释参数:
预期结果是second
和(second+third)
参数之间的值,或t, b, c, d, a, p
和b
之间的b+c
规范名称。
您可以使用如下简单算法绘制函数图:
function graph(f:Function,w:Number,h:Number):Shape {
// returns a shape with black on white graph drawn within a rectangle of given dimensions
var s:Shape=new Shape();
s.graphics.lineStyle(0); // black
s.graphics.moveTo(0,h); // lower left corner
for (var i:int=0;i<w;i++) {
s.graphics.lineTo(i,f(i,h,-1*h,w));
}
return s;
}
说到C ++,例如easeInQuad
应该像这样编程(如果我没有弄乱C ++语法):
double easeInQuad(double t, double b, double c, double d) {
double td=t/d;
return b+c*td*td;
}