1

Web で Robert Penner のイージング関数を見つけました。彼らは素晴らしい働きをします。バウンス 1 を手に入れましたが、これもうまく機能しますが、最初のバウンスを少なくするか、完全に排除したいと考えています。どのように?

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 ページ) をすくい取り、値をいじってその効果を確認しましたが、それを破ることに成功しただけです。:-) 最初のバウンスは 2 番目の if ステートメントにあるようです。マジック ナンバー 1、2、3、および 6 を半分にして 2 倍にし、微調整して変更しましたが、アニメーションが台無しになります。

マジックナンバーの意味を知っている人はいますか?なぜすべてを 2.75 で割りますか? なぜ 2 ではなく、なぜ 3 ではないのですか? なぜすべてに 7.5625 が掛けられているのですか? どうして 8 じゃないの、なぜ 6 じゃないの?

誰かが説明したり、最初のバウンスを取り除く方法を教えてくれたりしたら、私は永遠に感謝します.

4

0 に答える 0