1

私は、A* アルゴリズムの使用を要求するプロジェクトに取り組んでいます。このプロジェクトでは、千の戦略ゲームのゲームプレイのように、左クリックでプレイヤーを選択し、右クリックでマップに誘導します。グラフィックは 2D で、ゲーム Don't Starve に少し似ており、ゲームは SFML / C++ で開発されています。

プレイヤーの移動には A* を使用する必要があります。実際、道路に障害物が現れた場合、プレイヤーはそれを回避する必要があります。しかし、今のところ、マップにグリッドを適用する方法がわかりません。グリッドセルが表示されないように、木/岩やその他のものをどこにでも配置したいと考えています。今のところ、開いているリストはピクセルのみで構成されていますが、これは良い解決策ではないと思います^^、アルゴリズムはかなり遅いです。高速なアルゴリズムを維持しながら現実的なレンダリングを行うための解決策があれば、喜んでお聞きします。:)

前もって感謝します、

4

2 に答える 2

2

スクリーンショットはありますか?

パスファインディング グリッドとレンダリング グリッドは異なる場合があります。ゼルダは、移動とレンダリングにさまざまなサイズのタイルを使用しました。

ナビゲーション メッシュ

これはマップ構造にとってやり過ぎかもしれませんが、ナビゲーション メッシュを使用することはできます。

ここに画像の説明を入力ここに画像の説明を入力

編集: まだ読んでいない場合は、Amit のすばらしいリソースがあります: http://theory.stanford.edu/~amitp/GameProgramming/

于 2013-09-24T21:19:19.117 に答える
0

あなたが探しているのは離散化です。このわいせつな名前の背後にあるのは、単純な原則です。無限の量のデータを処理することはできません。

次に、世界で変換を実行する必要があります。キャラクター/ユニットが任意の場所に移動できるようにする代わりに (x と y は実数)、世界をある種のグリッドに分割できます (これがナビゲーション メッシュです)。およびウェイポイントが実行されている)、文字がこれらのセル (またはポイント、必要に応じて表示できます) にのみ移動できるようにします。これは離散化です: 連続値 (実座標) から離散値 (整数座標 / ポイント) に移行します。より正確に行うと、見栄えが良くなります。

これを行った後、セル/ポイント間の移動コストの割り当てはかなり簡単で、それに対して A* を実行することもできます。

于 2013-09-25T11:22:17.717 に答える