0

モンスターを正しい方向に向けるのに問題があります。これが私のコードです:

void RotateMonster(Monster monster)
{
     float deltaX = monster.Target.X - monster.coordinate.X;
     float deltaY = monster.Target.Y - monster.coordinate.Y;
     float tangentable = deltaX / deltaY;
     monster.Rotation = (float)Math.Atan(tangentable);
}

私が抱えている問題は、モンスターが時々後ろ向きに歩き、間違った方向を向いていることです。誰かが私が間違っていることを説明してもらえますか?

4

1 に答える 1

2

メソッドの結果をどう処理するかを決定するには、deltaXとの値の符号を確認する必要があります。deltaYAtan

このAtanメソッドは、タンジェントの計算に正の値を使用したか負の値を使用したかを認識しません。たとえば、 と の違いを判別できませ100/50-100/-50。一部の組み合わせでは、角度に半回転を追加する必要があります。

私は正確にどのような値を把握していませんが、基本的には次のようなものです:

float angle = (float)Math.Atan(tangentable);
if ((deltaX < 0 && deltaY >= 0) || (deltaX >= 0 && deltaY < 0)) {
  angle = angle + Math.PI;
}
monster.Rotation = angle;

...または正と負の値のその他の組み合わせ。座標系で正しい結果が得られるものをテストできるはずです。

于 2013-06-22T20:25:19.070 に答える