0

どこでも検索し、ホーミング ミサイルのコーディングに関するリソースをいくつか見つけましたが、アクション スクリプトとコーディング全般に不慣れなため、さまざまなビットが何をするのか、ゲームに組み込むどころか、本当に理解できません。

学校のプロジェクトでスクロール シューティング ゲームを作成しています。次のように機能する特別な「第 3 の」武器があります。

  • 敵が範囲内にいるとき、武器は自動発砲します
  • 武器は最も近い敵をターゲットにして、その方向に進みます
  • ミサイルでもあるので、その回転運動も必要です
  • ターゲットが破壊されると、ミサイルは自爆します

最も近いターゲットを見つけるためのコードは既にあります。

for (var i in enemies)
        {
            var min = Infinity; // Set to infinity so the if statement will work

            var tempDist = getDistance(enemies[i]); // tempDist stores the distance

            if (tempDist < min && tempDist < 300)
            {
                min = tempDist;
                closestEnemy = enemies[i];
            }
        }

(getDistance() は、私のコードで 2 つの MC 間の距離を見つけるための関数です)

私がやりたいのは、最も近くにターゲットがない場合は、closestEnemy に識別子または「未定義」を格納させることです。ホーミング ミサイル MC には、_root.playership.closestEnemy を通じて最も近い敵の位置を常に更新するクラスがあります。「未定義」の場合、爆発するはずです。

プレイヤーの宇宙船には、スポーンされたすべての敵のすべてのアイデンティティを含む「敵」と呼ばれる配列が含まれています。リロードと発砲率のシステムはうまくいっていますが、問題は追跡だけです。

どんな助けでも大歓迎です、ありがとう!

4

1 に答える 1

1

「追跡」をどのように動作させたいかについて、いくつかの決定を下す必要があります。

  • 完璧ですか(ミサイルはすぐにターゲットに向けられますか、それとも方向転換に時間がかかりますか?)
  • ミサイルには速度制限、加速、または一定速度がありますか?

これを行う最も簡単な方法は、ミサイルとターゲットの間のベクトルの角度になるようにミサイルの角度を調整することangle = atan2(target.y-missile.y, target.x-missile.xです。たとえば、(私の AS2 構文が正しくない場合は、ご容赦ください。しばらく経ちました。)

次のステップは、ミサイルの位置を進めることです。上記から既に角度を計算している場合は、三角法を使用して直交成分を分離する必要があります。

missile.x += missile.speed * cos(angle);
missile.y += missile.speed * sin(angle);

ミサイルとターゲットの間のベクトルの x、y コンポーネントを使用して、missile.speedフレームごとに一定の速度 ( ) で移動しています。そこから、加速度などの追加を開始できます (直線速度と角速度の両方)。

うまくいけば、これは役に立ちます。

于 2013-10-24T02:35:46.963 に答える