1

ゲームを作成していて、コードに実装するのが難しい部分に遭遇しました。私のゲームはタイルベースのプラットフォーマーで、たくさんの敵があなたを追いかけています。基本的に、理論的には、敵がフレーム/秒/2 秒ごとに、プレイヤーへの現実的で最短のパスを見つけられるようにしたいと考えています。元々A-starが解決策だと思っていたのですが、敵を重力に逆らう道に誘導してしまい、良くありません。また、複数の敵が毎秒それを使用して最新のパスを取得し、その最初の数タイルを歩きます。そのため、パスの残りの部分は毎秒破棄され、最初の数タイルだけがたどられます。複数の敵がいる場合、毎秒同時に新しいパスを計算するのは大変なことのように思えますが、私が望むものを達成する他の方法はわかりません。これは私が欲しいものの写真です:写真 説明: 緑色の人物がプレイヤー、赤色の人物が敵です。灰色のタイルは通常の開いたタイルで、何もタイルはありません。茶色のタイルは立つことができるタイルです。そして最後に、強調表示された黄色のタイルは、現実的にプレイヤーに到達するために、敵が見つけられるようにしたいパスを表しています. SO、質問は次のとおりです。これを取得するために使用できる現実的な経路探索アルゴリズムは何ですか? 速さを保ちながら?

編集* 私は、可能な限り最も複雑な地図を表すために写真を更新しました。このマップは、私のゲームのプレーヤーが実際に見ているものを表しています。彼らは WASD を使用するだけで動き回ることができ、この 2D プラットフォーム ビューを移動する自分自身を見ることができます。彼らはさまざまなタイプの敵になり、すべて速度とジャンプの高さが異なります。しかし、全員がこのマップでジャンプして移動するのに十分なジャンプの高さと速度を持っています。マップは、レベル データを含む XML ファイルを読み取るだけで生成されます。次に、データが解析され、XML の内容に従って、さまざまな種類のタイルがスプライトを保持するタイルに配置されます。EX( XML ノード: (type="reg" graphic="grass2" x="5" y="7" ) したがって、x と y は定数 gridSize (30 など) で乗算され、それに応じて配置されます。敵は、敵にアタッチされた AI クラスからフレームごとの指示を受け取ります。このクラスは、このパスを生成し、敵に最初の方向を返す責任があります。これは、敵が古い間違ったパスをたどらないように、1 秒ごとに発生する必要があります。私のコンセプトを理解しているかどうかを教えてください。また、考えやアイデア、または私が探している答えがあれば教えてください。また、このゲームの物理は経路探索とは別のものであり、AABB 対 AABB の概念 (プレイヤーと敵も AABB である) を使用してうまく機能します。このクラスは、このパスを生成し、敵に最初の方向を返す責任があります。これは、敵が古い間違ったパスをたどらないように、1 秒ごとに発生する必要があります。私のコンセプトを理解しているかどうか教えてください。何か考えやアイデアがあるか、私が探している答えさえあれば教えてください。また、このゲームの物理は経路探索とは別のものであり、AABB 対 AABB の概念 (プレイヤーと敵も AABB である) を使用してうまく機能します。このクラスは、このパスを生成し、敵に最初の方向を返す責任があります。これは、敵が古い間違ったパスをたどらないように、1 秒ごとに発生する必要があります。私のコンセプトを理解しているかどうかを教えてください。また、考えやアイデア、または私が探している答えがあれば教えてください。また、このゲームの物理は経路探索とは別のものであり、AABB 対 AABB の概念 (プレイヤーと敵も AABB である) を使用してうまく機能します。

4

2 に答える 2

1

ここで A* を使用するコツは、タイルをリンクして利用可能なパスを形成する方法です。例として、赤のプレイヤーが通過する必要がある最初のギャップを考えてみましょう。次のプラットフォーム (左側の茶色のタイル) への「リンク」は、実際には移動アクションではなくジャンプ アクションです。さらに、ノードを相互に接続する方法を決定するのはあなた次第です。灰色のタイルから茶色のタイルの上にある灰色のタイルに、下に何もない灰色のタイルに移動するときは、手始めに(ショートカットを開くジャンプを思いとどまらせることなく)重いペナルティを追加します。

私が個人的に見ているルートは 2 つあります。プレイヤーがどこまでジャンプできるか、どこでジャンプするかを簡単に予測する方法と、アルゴリズムがノードの隣接関係を決定する方法を調整する方法、またはパスを受け入れて、パスの一部が空中に「ハング」するタイミングを決定する方法です。 (すぐ下に茶色のタイルはありません)敵がパスの次の部分に「ジャンプ」するようにアニメーション化します。トリックは、パスが放物線でなくても敵が茶色のタイルを通過する可能性がある場合の処理​​です。

私はどちらのソリューションにも精通していません。ちょうど私が考えたことがあります。

于 2013-09-26T23:38:51.910 に答える
0

関連するアドバイスを提供できるように、自動または手動で作成するマップ、プレイヤー、敵の行動 (ジャンプアップや速度を超えて移動することを含む) の最も複雑なケースを提供する必要があります。指定されたマップは非常に単純です。マップを 2 次元配列に配置し、最初のプレーヤーの位置をそのマップの要素として配置し、最初に、同じ行の小さい番号の列が茶色で占められているかどうかをテストします。 false になるまで繰り返し、次に同じ行より上の列などを繰り返して敵を移動します。

更新: ステージ生成の私の読書から-それはいつかあなたが作成します-セミランダムではありません.

私の提案は、敵が同じ AI で自分自身のクローンを作成しますが、目に見えず、各クローンが異なる方向にジャンプし始め、上/左/右/斜め右/左にジャンプし、成功するたびに新しいクローンを作成します-基本的に遺伝的アルゴリズム. マップから、敵は 1 つのパスを別のパスよりも評価する必要がないように見えます。1 つの方法でプレイヤーの初期位置に近づくことができず、他の方法ではそうではありません。

于 2013-09-27T01:31:17.463 に答える