1

360 度以上回転させたいポリゴンがありますが、それでも完全なラウンドを追跡しています。

私は可変角度として定義された指の角度を持っており、回転しているモブの角度を知っていますが、タッチポイントとモブの間の角度が360から0、またはその逆になるため、完全に回転するたびに角度がリセットされます。

どうすればこれを回避できますか?

現在のコード:

double rotation = angle - lastAngle;
selectedMob.rotate((float) (rotation));

ここで angle はタッチ ポイントと Mob の間の角度、lastAngle はこれより前の角度です。

メソッドrotateは、次のように現在の角度に回転を追加するだけです:

public void rotate(float angle) {
    this.angle += angle;
}

角度は次のように定義されます

                double rads = Math.atan2(dy, dx);
                double angle = Math.toDegrees(rads);

それから角度を調整して、上が 0 から始まるようにしますが、0 から 360 になるようにします

デバッグ:

09-13 00:03:53.708: V/GameActivity(23389): updating frame
09-13 00:03:53.708: V/GameActivity(23389): checked for all mobs
09-13 00:03:53.825: V/GameActivity(23389): Angle of finger is 360.0
09-13 00:03:53.825: V/GameActivity(23389): Angle of mob is 344.94818
09-13 00:03:53.825: V/GameActivity(23389): Last angle is 359.56921278299137
09-13 00:03:53.825: V/GameActivity(23389): Rotation will be 0.43078721700862843
09-13 00:03:53.825: V/GameActivity(23389): ****************
09-13 00:03:53.825: V/GameActivity(23389): updating frame
09-13 00:03:53.825: V/GameActivity(23389): checked for all mobs
09-13 00:03:54.137: V/GameActivity(23389): Angle of finger is 0.4275725068334077
09-13 00:03:54.137: V/GameActivity(23389): Angle of mob is 345.37897
09-13 00:03:54.137: V/GameActivity(23389): Last angle is 360.0
09-13 00:03:54.137: V/GameActivity(23389): Rotation will be -359.5724274931666
09-13 00:03:54.137: V/GameActivity(23389): ****************
4

1 に答える 1

1

現在の角度を と同じ範囲に変更できますlastAngle

while(Math.Abs(angle - lastAngle) > 180)
    angle += (angle > lastAngle ? -360 : 360);
于 2012-09-12T21:04:11.397 に答える