如何修改此缓动功能以减少反弹?

时间:2009-04-11 15:30:57

标签: actionscript-3 animation

我正在尝试修改Flash CS3提供的fl.motion.easing.bounce函数,以减少结果动画的反弹。我很欣赏“少反弹”有点模糊,但我很欣赏任何帮助理解这个功能。

感谢。

 /**
 *  @param t Specifies the current time, between 0 and duration inclusive.
 *
 *  @param b Specifies the initial value of the animation property.
 *
 *  @param c Specifies the total change in the animation property.
 *
 *  @param d Specifies the duration of the motion.
 *
 *  @return The value of the interpolated property at the specified time.     
 */  
public static function easeOut(t:Number, b:Number,
                               c:Number, d:Number):Number
{
    if ((t /= d) < (1 / 2.75))
        return c * (7.5625 * t * t) + b;

    else if (t < (2 / 2.75))
        return c * (7.5625 * (t -= (1.5 / 2.75)) * t + 0.75) + b;

    else if (t < (2.5 / 2.75))
        return c * (7.5625 * (t -= (2.25 / 2.75)) * t + 0.9375) + b;

    else
        return c * (7.5625 * (t -= (2.625 / 2.75)) * t + 0.984375) + b;
}

3 个答案:

答案 0 :(得分:1)

基本上,该函数根据4个因素返回新位置的插值:动画的当前时间,动画属性的初始值,要完成的动画的总变化以及动画的总持续时间。

你所拥有的是对不同时间的检查:如果动画仍未达到总持续时间的36%(1 / 2.75),则应用第一个等式;如果它在36%和72%之间,则应用第二个;等

每个等式都是一个函数,取决于第一个树参数,所以基本上你需要稍微调整一下。

我建议玩那个硬编码的7.5625(让它更大,更低,看看结果),直到你满意为止。


7.5625Math.pow(2.75, 2);,但硬编码以节省处理费用。

答案 1 :(得分:0)

我知道这不会给你一个明确的答案,但这些方程式首先由Robert Penner在他的书Programing Macromedia Flash MX中构思出来。我知道这不是一个简单的答案,但在他的书中他详细解释了这些功能是如何工作的。要真正理解你可能想要拿起副本并深入挖掘。

答案 2 :(得分:0)

尝试放大第一次触地时间,减少弹跳时间,我先制作1.4 / 2.7的整个距离,然后是1.4~2.1,这个范围是0.7,半范围是0.35,0.35 * 0.35 = 0.1225, 1-0.1225 = 0.8775,看起来不错,如果你想降低弹跳范围,尝试使用这个概念:减少两个时间点的范围。

    t /= d;
    if (t < 1.4 / 2.75) {
        return 3.858419 * t * t;
    }
    else if (t < 2.1 / 2.75) {
        t -= 1.75f / 2.75;
        return 7.5625 * t * t + 0.8775f;
    }
    else if (t < 2.5 / 2.75) {
        t -= 2.3f / 2.75;
        return 7.5625 * t * t + 0.96f;
    }
    t -= 2.625f / 2.75;
    return 7.5625 * t * t + 0.984375f;