だから私は、Greenfootと呼ばれるこのフレームワークでこのトップダウン2D Javaゲームを作り、あなたが戦うつもりの人のためにAIに取り組んでいます。彼らが世界を現実的に動き回ることができるようにしたいので、すぐに、他のいくつかのことの中で、何らかの経路探索が必要になることに気付きました。
2つのA *プロトタイプを作成しました。1つはグリッドベースで、ウェイポイントで動作するものを作成したので、障害物/建物の2D「マップ」からパスを作成できるノードのグラフに到達する方法を考え出す必要があります。実際の経路探索はうまくいくように見えます。私の開いたリストと閉じたリストだけがより効率的なデータ構造を使用できますが、必要に応じて必要なときにそれを取得します。
ai-blog.netのこの投稿に記載されているすべての理由で、ナビゲーションメッシュを使用する予定です。しかし、私が直面した問題は、ノードの任意の部分を移動する場合、A *がポリゴンの中心/エッジからの最短経路であると考えるものが必ずしも最短経路ではないことです。より良いアイデアを得るために、私はstackoverflowで私が尋ねた質問を見ることができます。
可視性グラフに関する良い答えを得ました。それ以来、私はこの本(Computational Geometry:Algorithms and Applications)を購入し、このトピックをさらに読みましたが、ナビゲーションメッシュの方が好きです(AmitのPath-Findingに関する注意の「複雑さの管理」を参照)。(補足として、最初と最後が隠されていない場合、Theta *を使用して複数のウェイポイントを1つの直線に変換できます。または、最後の前のウェイポイントにチェックを戻すたびに、直進できるかどうかを確認しますこれに)
基本的に私が欲しいのは、一度ファンネルアルゴリズムを通過させたナビゲーションメッシュです(たとえば、Digesting Duckのこのメッシュ)、ノードからノードのみに続く最短パスであるものではなく、真の最短パスを取得します。ただし、一部のポリゴンを通過してノード/エッジをスキップできる場合、実際の最短ではありません。
また、ポリゴンに関する情報を保存することをどのように提案するかも知りたいです。作成したウェイポイントプロトタイプの例では、各ノードをオブジェクトとして使用し、そのノードから移動できる他のすべてのノードのリストを保存しました。ポリゴンでは機能しないと思いますか?そして、ポリゴンがオープン/トラバース可能かどうか、またはソリッドオブジェクトかどうかを確認するにはどうすればよいですか?ポリゴンを構成するノードを保存するにはどうすればよいですか?
最後に、記録のために:既に他のソリューションが利用可能であり、このゲーム以外でこのコードを使用するつもりはないので、私はこれをゼロから自分でプログラムしたいと思います。必然的に品質が低下します。