アーキテクチャの説明
エンティティシステムを作成(設計)していて、多くの問題に遭遇しました。私はそれを可能な限りデータ指向で効率的に保つようにしています。私のコンポーネントは、同種のプールに割り当てられたPOD構造(正確にはバイトの配列)です。各プールにはComponentDescriptorがあります。コンポーネント名、フィールドタイプ、フィールド名のみが含まれています。
エンティティは、コンポーネントの配列へのポインタにすぎません(アドレスはエンティティIDのように機能します)。EntityPrototypeには、エンティティ名とコンポーネント名の配列が含まれています。最後に、コンポーネントプールで機能するサブシステム(システムまたはプロセッサ)。
実際の問題
問題は、いくつかのコンポーネントが他のコンポーネントに依存していることです(モデル、スプライト、PhysicalBody、アニメーションは変換コンポーネントに依存します)。これは、コンポーネントの処理に関して多くの問題を引き起こします。
For example, lets define some entities using [S]prite, [P]hysicalBody and [H]ealth:
Tank: Transform, Sprite, PhysicalBody
BgTree: Transform, Sprite
House: Transform, Sprite, Health
and create 4 Tanks, 5 BgTrees and 2 Houses and my pools will look like:
TTTTTTTTTTT // Transform pool
SSSSSSSSSSS // Sprite pool
PPPP // PhysicalBody pool
HH // Health component
インデックスを使用してそれらを処理する方法はありません。3日間かけて作業を行っていますが、まだアイデアはありません。以前の設計では、TransformComponentはエンティティにバインドされていましたが、それは良い考えではありませんでした。それらの処理方法についてアドバイスをいただけますか?それとも、全体的なデザインを変更する必要がありますか?エンティティのプール(コンポーネントプールのプール)を作成する必要があるかもしれませんが、CPUキャッシュの悪夢になると思います。
ありがとう