我在网上找到了 Robert Penner 的缓动函数。他们工作很棒。我得到了一个反弹的手,它也很好用,但我想减少第一次反弹或完全消除它。如何?
public static float EaseOutBounce(float currentTime, float startValue, float changeInValue, float totalTime)
{
float magic1 = 7.5625f;
float magic2 = 2.75f;
float magic3 = 1.5f;
float magic4 = 2.25f;
float magic5 = 2.625f;
float magic6 = 0.75f;
float magic7 = 0.9375f;
float magic8 = 0.984375f;
if ((currentTime /= totalTime) < (1 / magic2)) //0.36%
{
return changeInValue * (magic1 * currentTime * currentTime) + startValue;
}
else if (currentTime < (2 / magic2)) //0.72%
{
return changeInValue * (magic1 * (currentTime -= (magic3 / magic2)) * currentTime + magic6) + startValue;
}
else if (currentTime < (2.5 / magic2)) //0.91%
{
return changeInValue * (magic1 * (currentTime -= (magic4 / magic2)) * currentTime + magic7) + startValue;
}
else
{
return changeInValue * (magic1 * (currentTime -= (magic5 / magic2)) * currentTime + magic8) + startValue;
}
}
我浏览了 Robert 的 pdf(77 页),并尝试了这些值以查看它们的效果,但我只是成功地打破了它。:-) 第一次反弹似乎在第二个 if 语句中。我改变了幻数 1、2、3 和 6,将它们减半并加倍,然后轻推它们,但这只会破坏动画。
有谁知道神奇的数字是什么意思?为什么一切都除以 2.75?为什么不是2,为什么不是3?为什么一切都乘以 7.5625?为什么不是 8,为什么不是 6?
如果有人可以解释,或者只是启发我如何取出第一次反弹,我将永远感激不尽。