1

私は現在、2D ゲーム開発の基本パターンを学習するという考えで、基本的なプラットフォーマー ゲームを書いています。それらの 1 つは驚くべき A スター パスファインディングです。いくつかの記事を読んで勉強した後 (そのうちの 2 つが最高です: http://www.policyalmanac.org/games/aStarTutorial.htmhttp://theory.stanford.edu/~amitp/GameProgramming/Heuristics.html# S7 )、チュートリアルとソース コード、私は個人的な学習プロセスに適したマンハッタン メソッドを使用して簡単な A Star Pathfinding を行いました。

次の論理的なステップは、NPC がゴール ターゲットに到達するためにジャンプまたははしごを登らなければならないプラットフォーム シナリオで同じことを行うことです。これらのスクリーンキャストhttp://www.youtube.com/watch?v=W2xoJfT6sekhttps://www.youtube.com/watch?v=Bc7tu-KwfoUを見つけました。これは、私がやりたいことを完全に示しています。

それを実装する方法を説明するリソースは今のところ見つかりませんでした。一緒に作業できる出発点を誰か教えてもらえますか?

前もって感謝します

4

2 に答える 2

3

私が知る限り、ジャンプ/はしごの唯一の違いは、可能な動きに影響を与えることです。したがって、アルゴリズムで行う必要があるのは、キャラクターが移動できる場所と移動できない場所、およびそこに移動するコスト (実装している場合) を考慮することだけです。

于 2012-09-01T09:00:06.887 に答える
0

例として適切なクリーンな A* コードはありませんが、A* を実装する際のヒントをいくつか紹介します。

まず、チュートリアルで見過ごされがちな最も重要なヒントは、優先キューを使用することです。

可能な移動状態を生成するときはいつでも、その移動状態のヒューリスティックの値を優先度として、それらを優先度キューに入れます。これは、A* を DFS (スタックとバックトラッキングを使用する) または単純な貪欲なパス検索 (単に現在の状態に対して最適な状態に移動する) と区別します。

次に、これらの指針に注意してください。これを実装する言語はわかりませんが、(C とは異なり) ポインターを抽象化する言語で実装する場合でも、ディープ コピーとプレーンシャロー コピーの概念を理解する必要があります。初めて A* (Python で) を実行したときのことを覚えていますが、これには注意を払いませんでした。状態が繰り返し上書きされ、予期しない動作が発生しました。ディープ コピーを作成していないことが判明しました。

とはいえ、考えているタスクの複雑さによっては、これらすべてのディープ コピーがメモリを混乱させる可能性があります。適切なメモリ管理は役に立ちますが、現実世界のパフォーマンスが必要な大きな問題のインスタンスでは、繰り返しを深める A* を使用する傾向があり、繰り返しのたびにメモリを整理することができます。

于 2012-09-01T09:18:46.513 に答える