私はXNA用の小さなゲームエンジンを作成しています。現在、エンティティマネージャには、更新とレンダリングが可能なすべてのエンティティのリストがあります。しかし、私はこのリストを 'サブリスト'に分割したいと言います。一部のエンティティではレンダリングが不要なため、レンダリングエンティティを非レンダリングエンティティから分離して、すべてのエンティティを更新する別のリストを維持したいと考えています。だから3つのリストです。C#リスト間の一貫性
リスト間の整合性を簡単に維持する方法はありますか?両方のリストで全く同じオブジェクトが参照されていることを確認するには? (オブジェクトのコピーではありませんか?) C++では、レンダリングするエンティティへのポインタの配列と、存在しないエンティティに対するポインタの配列があります。
問題は実際にはエンティティをこれらのリストに入れておらず、それによって私を捨てることになります。エンティティを破壊するために、私は単に、そのエンティティ内で真の 'dispose' boolを設定します。エンティティマネージャーは、すべてのエンティティをループするとき、 'dispose'がtrueに設定されている場合、そのエンティティへの参照を削除し、参照がそれ以上残っていないため、ガベージクリーナはエンティティを破棄します。私は手動で、Entitiesと何か関係がある各リストを手作業で調べ、そのリストからEntityを削除して、一貫性を保たなければなりませんか?
この「問題」の別の例は、クワッドツリーです。私は2dゲームを持っており、私はすべてのエンティティのためのクワッドツリーを生成します。 2つのグリッド位置の間にあるエンティティは、ツリーの2つのブランチにあります。どのように私は木からそれを削除するだろうか?そのエンティティへの参照をツリー全体で検索しますか?それが事実ならクワッドツリーを持つのはちょっと意味がないようです。
このメソッドを頻繁に呼び出す必要がある場合、これは遅くなるでしょうか? –
@Chris、3つのリストを同時に維持し、それらを同期させたり、サイズを変更したりすることはありませんか?これはパフォーマンスが考慮されているとは言いませんが、Linqクエリを指し示す許容できないパフォーマンスの低下と、複数リストアプローチが実際に高速であることを証明したいと考えています。 –