2016-12-31 75 views
1

补间是一个视频编辑术语,用于描述运动的易用性。例如,对于电梯,当电梯达到所需楼层时,电梯不会全速行驶并停下。它知道它在哪一层,它要去哪个楼层,需要多长时间才能到达那里。然后它使用该数据来平滑其运动。轻松移动,编程补间,C++

我希望能够通过使用补间来为我的项目编程这个平滑的动作。

如何做到这一点的方法奠定了在http://robertpenner.com/easing/penner_chapter7_tweening.pdf

具体看pg207-211

本指南解释了什么是补间,然后显示在动作脚本代码。说实话,我觉得有点愚蠢,因为我尝试过使用提供的例子,但似乎无法用另一种语言(如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; 
}; 
+1

你的问题是什么? –

+0

我编写了我自己的补间的方式,阅读我的类ru.delimiter.math.TweenAlot在http://www.delimiter.ru/as/ – Organis

回答

2

在AS3一个适当的补间函数接受Number 6个参数与最后两个参数为0违约应该解释参数如下:

  • 第一个参数是主参数,它填充了从0到补间持续时间的值;
  • 第二个参数是当第一个参数为零时尝试补间的参数的值;
  • 第三个参数是tweening参数预期分配的值的间隔大小;
  • 第四个参数是以用户提供的任何单位的持续时间,因此是一个数字而不是一个整数;
  • 第五和第六个参数是可选的,并不在AS3内置补间库中使用,但可用于修改在函数内完成的插值(如果在其他位置自定义使用)。

预期结果是second(second+third)参数之间的值,或与bb+c之间其的t, b, c, d, a, p规范名称。

您可以使用一个简单的算法,这样绘制函数的图形:

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; 
}