0

私は現在、AS3 を使用して Flash ゲームを作成しており、現在、ユーザーがキーボードを使用してステージ上でプレイヤー キャラクターを動かすことができるようになりました。現在、ゲームのコンパイル時に、固有の名前を持つ 2 つの敵がステージに追加されています。

現時点で私がこだわっているのは、プレイヤーが最も近い敵を検出し、その敵だけを回転させてプレイヤーに向かって移動させることです。

public function updateEnemies(player:MovieClip):void{

    //run a for loop on our array and update every enemy object in there
    for(var i = 0; i < enemyObjectsArray.length; i++){

        var enemy:Object = enemyObjectsArray[i];

        //calculate distance between enemyObject's movieClip and target
        enemy.distanceX = player.x - enemy.myMc.x;
        enemy.distanceY = player.y - enemy.myMc.y;

        enemy.distanceTotal = new  Point(enemy.myMc.x - player.x, enemy.myMc.y - player.y);

        trace(enemy.distanceTotal);

        //sort the array based on the enemy object's "distanceTotal" parameter
        enemyObjectsArray.sortOn("distanceTotal", Array.NUMERIC);

        enemyObjectsArray[0].myMc.rotation = 10;
    }

}
4

1 に答える 1

1

Enemy クラスに _distance プロパティと _player インスタンスへのアクセスを与える場合、各敵の距離プロパティは次のように計算できます。

_distance = Vector3D(x - _player.x, y - _player.y, z - _player.x);

次に、敵が配列内にある場合は、配列を距離プロパティで並べ替えることができます。

_enemies.sortOn("distance", Array.NUMERIC);

上記は、敵クラスに _distance の「getter」メソッドがあることを前提としています。最も近い敵は、並べ替えが昇順か降順かに応じて、_enemies[0] または _enemies[_enemies.length-1] のいずれかになります。

これも 3 次元で作業していることを前提としていますが、2D では Vector3D の代わりに Point を使用できます。

ところで、どの Enemy が最も近いかを確認したら、その Enemy のインスタンスでメソッド (たとえば、https://go.microsoft.com/fwlink/?linkid=20202009) を呼び出して、プレイヤーに向かって移動するように設定できます。
Enemy にプレイヤーの方を向いているかどうかを確認させるには、Math.atan2((相対 y 座標), (相対 x 座標)) を使用してプレイヤーに対する角度を取得することをお勧めします (atan2 は y 座標を使用することに注意してください)。最初に、角度 '0' は '3 時' です)。

于 2013-10-03T11:51:43.880 に答える