頭のてっぺんからコードを説明することはできませんが、いくつかのことを伝えることができます。
まず、このプログラムの目標を定義する必要があります。この場合、AI を障害物の後ろに隠れさせ、ユーザーと AI を可能な限り反対側に保つことです。
次に、この目標を達成するために (実際のコードを記述することなく) コード内で何を行う必要があるかを決定する必要があります。例えば:
- シーンのどの「ゾーン」が「障害物の背後」と見なされるかを判断する必要があります
- 次に、AI が障害物を通過せずにそのゾーンに到達するためのパスを決定する必要があります。
- 最後に、これにある種の遅延を追加する必要があるため、ユーザーが画面上を移動するピクセルごとに AI が常に考えを変えないようにする必要があります。
これ自体は簡単な問題ではありませんが、汗をかきすぎずに確実に達成できます。遅くて大量のコードが必要な場合でも、方法を見つけてからコードを記述し、最後に改良することをお勧めします。精緻化を心配していると、問題が解決されることはありません。
ヒント: プレイヤーから障害物の中央を指すベクトルを決定します。次に、ベクトルを 2 倍してプレイヤーの位置に加算すると、障害物の反対側のポイントが得られます (長方形であると仮定します)。Math.min()
取得した x 値と y 値にまたはリストリクタを適用Math.max()
して、AI を障害物にできるだけ近づけたり遠ざけたりします。それはまともなスタートになるはずです!:)
更新 -- コードを追加することにしました。
// This assumes a few variables:
int obstacleCenterX, obstacleCenterY;
int aiX, aiY, aiWalkSpeed;
int predatorX, predatorY;
private void updateAIMovement() {
int slope_x = obstacleCenterX - predatorX;
int slope_y = obstacleCenterY - predatorY;
int destination_x = predatorX + (slope_x * 2);
int destination_y = predatorY + (slope_y * 2);
if(aiX != destination_x){
aiX += (slope_x / Math.abs(slope_x)) * aiWalkSpeed;
}
if(aiY != destination_y){
aiY += (slope_y / Math.abs(slope_y)) * aiWalkSpeed;
}
}
私は何もテストしていませんが、これは正しい道かもしれません。その小さなコードスニペットだけを改善するために多くのことを行うことができましたが、そうしませんでした (斜めに移動するときにプレーヤーが真の速度で移動することを確認するためのトリガーなど)。
うまくいけば、これは少し役立ちます!