私は小さなマルチプレイヤー ゲームを作成しており、マウスの方向をキャラクターの位置と比較する方法を見つけようとしています...
たとえば、キャラクターがポイント A にある場合、キャラクターが向いている方向を変更して、マウスがある方向を向いているようにしたいと思います。
次のガイドに従って、キャラクターの方向ムービークリップを作成しました。
多数のオンライン コード/提案/ハウツーを試しましたが、どれもうまくいきません。
私は小さなマルチプレイヤー ゲームを作成しており、マウスの方向をキャラクターの位置と比較する方法を見つけようとしています...
たとえば、キャラクターがポイント A にある場合、キャラクターが向いている方向を変更して、マウスがある方向を向いているようにしたいと思います。
次のガイドに従って、キャラクターの方向ムービークリップを作成しました。
多数のオンライン コード/提案/ハウツーを試しましたが、どれもうまくいきません。
次のような関数を使用して、角度を決定できます。
public static function polarAngle(point:Point, center:Point=null):Number
{
if (!center)
center = new Point(0, 0);
var degrees:Number = Geometry.rad2deg(Math.atan2(point.y - center.y, point.x - center.x));
if (degrees < 0)
degrees += 360;
return degrees;
}
この機能を使用するpoint
と、マウスのポイントと比較しcenter
て、登録ポイントまたはキャラクターの中心になります。
したがって、これは次のように呼び出すことができます。
var angle:Number = polarAngle(new Point(mouseX, mouseY),
new Point(character.x, character.y));
Flash ネイティブの座標系を使用することをお勧めします。0 から 180 までの値は時計回りの回転を表します。0 から -180 までの値は、反時計回りの回転を表します。
これらを基本方向システムに変換すると、内積を使用するなどの洗練されたアルゴリズムが存在する可能性があります。ただし、力ずくで攻撃することもできます。
if ((angle < 22.5) || (angle > 337.5))
return "e";
if (angle < 67.5)
return "se";
if (angle < 112.5)
return "s";
if (angle < 157.5)
return "sw";
if (angle < 202.5)
return "w";
if (angle < 247.5)
return "nw";
if (angle < 292.5)
return "n";
if (angle < 337.5)
return "ne";