5

Javascriptでタワーディフェンスゲームを作成しようとしています。

パスファインディングとは別に、すべてうまくいっています。

私はこのウェブサイトのastarコードを使用しています:http ://www.briangrinstead.com/blog/astar-search-algorithm-in-javascriptこれはバイナリヒープを使用します(これはかなり最適だと思います)

私が抱えている問題は、人々が「攻撃者」の進路を阻止できるようにしたいということです。これは、各「攻撃者」が自分で出口への道を見つけることができる必要があることを意味します(誰かが単一の「攻撃者」を切り落とすことができ、出口への自分の道を見つける必要があるため)。これで、5/6の攻撃者は、問題なくいつでもパスファインドを実行できます。ただし、10人以上の攻撃者がパスをブロックしているとすると、10人全員が同時にパスファインディングスクリプトを実行する必要があり、FPSが1秒あたり約1/2に低下します。

これは、いつでも多くのエンティティのパスファインディングを持っている人にとっては一般的な問題であるに違いないので、私のアプローチよりも良い方法があるはずだと思います。

だから私の質問は:最も効率的な方法で複数の「ボット」にマスパスファインディングアルゴリズムを実装するための最良の方法は何ですか。

ありがとう、

ジェームズ

4

2 に答える 2

2

アンチオブジェクトを使用してください。これが安価なパスファインディングを取得する唯一の方法です。afaik: http ://www.cs.colorado.edu/~ralex/papers/PDF/OOPSLA06antiobjects.pdf

アンチオブジェクトとは、基本的に、個々のaiを持つボットの代わりに、ゲームマップにバインドされた1つの「群れai」を持つことを意味します。


ps:一般的なパスファインディングに関する別のリンクがあります(おそらく利用可能な最高のオンラインリファレンス): http ://theory.stanford.edu/~amitp/GameProgramming/index.html

于 2012-04-12T10:01:55.887 に答える
0

結果をキャッシュするだけです。

パスを値としてハッシュテーブル(オブジェクト)に格納し、各ノードにUUIDを指定し、UUIDを連結して一意のハッシュテーブルキーを形​​成し、パスを挿入します。

ハッシュテーブルからパスを取得するときは、パスを調べて、それがまだ有効かどうかを確認します。有効でない場合は、再計算して新しいパスをに挿入し直します。

あなたができる多くの最適化があります:)

c69が言ったように、群れのAIまたは集合精神が頭に浮かぶ:P

于 2013-10-28T03:54:31.283 に答える