如何修改C#XNA的缓出弹跳方程?

时间:2012-07-11 01:41:08

标签: c# animation xna-4.0 graphics2d

我在网上发现了罗伯特·彭纳的缓和功能。他们的工作很棒。我得到了一个反弹的手,它也运作良好,但我想减少第一次反弹或完全消除它。怎么样?

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

我已经浏览了罗伯特的pdf(77页),我已经玩过这些值来看看它们的效果,但我只是成功地打破了它。 :-)第一次反弹似乎是在第二个if语句中。我通过将它们减半并将它们加倍并轻推它们来改变幻数1,2,3和6,但它只是破坏了动画。

有谁知道神奇数字是什么意思? 为什么一切都被2.75分割?为什么不2,为什么不3? 为什么一切都乘以7.5625?为什么不是8,为什么不是6?

如果有人可以解释,或者只是告诉我如何取消第一次反弹,我会永远感激。

0 个答案:

没有答案