我正在尝试修改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;
}
答案 0 :(得分:1)
基本上,该函数根据4个因素返回新位置的插值:动画的当前时间,动画属性的初始值,要完成的动画的总变化以及动画的总持续时间。
你所拥有的是对不同时间的检查:如果动画仍未达到总持续时间的36%(1 / 2.75),则应用第一个等式;如果它在36%和72%之间,则应用第二个;等
每个等式都是一个函数,取决于第一个树参数,所以基本上你需要稍微调整一下。
我建议玩那个硬编码的7.5625(让它更大,更低,看看结果),直到你满意为止。
7.5625
为Math.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;