私は小さなゲームのための単純な群衆シミュレーションを行っています。パフォーマンスの問題:単純な群衆シミュレーションのリストを更新する
私の必要性はまともですが、パフォーマンスは良くありません。
基本的に私はウェイポイントに移動中に広がる必要があるオブジェクト(兵士)の "たくさんの"を持っています。
ここに私のコードのシンプルなバージョン書かアイブ氏:だからbasicly
List<Soldier> avoidList = new List<Soldier>();
foreach (Soldier s in gameWorld)
{
if (this == s)
continue;
if (Distance(s, this) <= 5)
{
avoidList.Add(s);
}
}
CalculateNewDirection(avoidList);
を、各兵士は、シーン内の他のすべての兵士の距離を確認し、あまりにも接近している兵士に基づいて方向を算出します。
は今のx^2つのオブジェクトを通して実行しているイム。
もし私が100個のオブジェクトを持っているならば、私は100^2 = 10.000個のオブジェクトを実行し、それぞれのオブジェクトavoidListを更新するだけです。
私は最大500個のオブジェクトをクランクすると、250.000個のオブジェクトを実行します。
Theresはこれを行うためには異なるスマートな方法でなければなりません!誰かが私を啓発することができます
希望:)私の頭の上オフ
私は実際に2人の兵士との距離を2回計算することで問題を認識していましたが、avoidListに特定の兵士が含まれているかどうかを確認するために、 – Tsanas
私はあなたのための可能な解決策で更新しました – Dervall
シンプルで効率的です。それは私たちが好きなことです;)また、5単位正方形のグリッドについての素晴らしいアイデア。どうもありがとう。 – Tsanas