0

一部のスプライトをスムーズに回転させるために正規化されたフロートを取得するのに問題があります。補間を使用してスプライトを回転させています。回転のある時点で、スプライトは毎回同じ場所でジャンプします。

name.angle = (name.getBody().getTransform().getRotation() * alpha + name.prevAngle * (1.0f - alpha));

私はオンラインで見て、-pi と +pi の間の角度を正規化する方法をいくつか見つけましたが、私の状況ではそれらを機能させることができません。

以下は動作しません

if (name.angle > Math.PI)
    name.angle += 2 * Math.PI;
else if (name.angle < -Math.PI)
    name.angle -= 2 * Math.PI;

以下は機能します

name.angle = name.angle < 0 ? MathUtils.PI2 - (-name.angle % MathUtils.PI2) : name.angle % MathUtils.PI2;
4

1 に答える 1

2

最初のコード スニペットでは、次のように記述します。

if (name.angle > Math.PI)
    name.angle += 2 * Math.PI;

これは「name.angle大きすぎる場合は大きくしてください」という意味です。+=に変更することでこれを修正しました-=(そして次のビットでに変更-=+=ます)。にも交換ifしましたwhile。そうすれば、初期角度が 2 pi を超えて大きすぎる/小さすぎる場合でも機能します。正しいコードは次のとおりです。

double pi = Math.PI;
while (angle > pi)
    angle -= 2 * pi;
while (angle < -pi)
    angle += 2 * pi;
于 2015-03-06T23:18:09.773 に答える