2012-04-12 14 views
5

私はJavascriptでタワー防衛ゲームを作成しようとしています。質量astarの経路探索

これは、すべての経路探索から離れても起こっている。..

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

問題I私は人々が "攻撃者"の道を塞ぐことを許可したいと思っています。これは、各 "攻撃者"が単独で出口に向かう道を見つけることができる必要があることを意味します(誰かが単一の "攻撃者"を切断し、出口に向かって独自の方法を見つける必要があるため)。現在、5/6の攻撃者はいつでも問題を発見することができます。しかし、パスが10人以上の攻撃者に対してブロックされているとすれば、そのうちの10人は同時にパスファインディングスクリプトを起動して、FPSを1秒あたり約1/2に落とす必要があります。

これは誰でもいつでも多くのエンティティの経路探索を行っている人にとって共通の問題であるため、私のアプローチよりも良い方法が必要であると思います。

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

おかげで、

ジェームズ

+1

は、線形時間がかかります)ので、実装は最適ではありません。 –

+0

私は少しスピードアップできるかどうか見てみましょう。しかし、私はより効率的なパスを見つけても、私がボットを試してみると遅いフレームレートで終わるだろうと考えています。 – james

+1

@jamesこれはほとんどのタワーディフェンスのようなもので、大体スクリーンの価値があり、複雑なコリソンはありません(つまり、ボットはお互いまたは他の動く物体と衝突しません)。あなたはこれを別々に扱います)、そうすれば、私はマップ全体のパスを計算するのが一番良いと思います。実際には、フレームごとにマップ全体を再計算する必要はないでしょう。注意深くアルゴリズムを構築する場合は、どのノードがユーザー変更の影響を受けるかを判断し、それらのノードから「上流」のみを再計算する必要があります。興味深いですね! – Tim

答えて

2

使用アンチオブジェクトが、これは私の知る限りで、安価な経路探索を取得する唯一の方法である: http://www.cs.colorado.edu/~ralex/papers/PDF/OOPSLA06antiobjects.pdf

アンチオブジェクト基本的にその代わりに、ボットが持つの平均個々のAI、あなたはあなたのゲームマップにバインドされている1つの "swarm AI"を持っています。


p.s:ここでは、一般的に経路探索(利用できる可能性が最高のオンライン参照)については、別のリンクです: http://theory.stanford.edu/~amitp/GameProgramming/index.html

+0

リソースをありがとう、少し後で見てみましょう。あなたが言ったことからちょうどそれは、全体の地図をパスファインドし、おそらくボットが従う各 "ブロック"の方向を設定する方が理にかなっているようです。 – james

0

ちょうど結果をキャッシュします。

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

あなたが戻って、ハッシュテーブルのうちのパスを取得し、パスを歩いて、そしてそれはまだ有効だかどうかを確認し、ない場合は、新しい1人の背中を再計算して挿入します。

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

C69は群れAIやハイブ心が心に来て言ったように:Pそれはハッシュテーブルに(一定の時間をかけてする必要がありながら、それはそのコードに `findGraphNode`のように見えます

関連する問題