O(N ^ 2)関数の改善(すべてのエンティティが他のすべてのエンティティを反復処理する)
少し背景を説明しますが、エンティティシステムにENTTを使用して、C ++の友人と進化ゲームをコーディングしています。クリーチャーは2Dマップ内を歩き回り、緑や他のクリーチャーを食べ、繁殖し、その形質が変化します。 さらに、ゲームをリアルタイムで実行した場合のパフォーマンスは良好です(60fpsは問題ありません)が、大幅な変更を確認するために4時間待つ必要がないように大幅にスピードアップできるようにしたいと思います。だから、私はできるだけ早くそれを取得したい。 クリーチャーが食物を見つけるための効率的な方法を見つけるのに苦労しています。各クリーチャーは、彼らに十分近い最高の食べ物を探すことになっています。 食べたい場合、中央に描かれた生き物は、149.64の半径(視界距離)で自分の周りを見回し、栄養、距離、およびタイプ(肉または植物)に基づいて、追求すべき食物を判断することになっています。 。 すべてのクリーチャーの食料を見つける機能は、実行時間の約70%を消費します。現在どのように書かれているかを単純化すると、次のようになります。 for (creature : all_creatures) { for (food : all_entities_with_food_value) { // if the food is within the creatures view and it's // the best food found yet, it becomes the best food } // set the best food as the target for creature …