現在、C ++向けにEntity Systemを再設計しています。多くのマネージャーがいます。私の設計では、ライブラリを結合するためにこれらのクラスがあります。「マネージャー」クラスに関しては、多くの悪いことを聞いたことがあります。おそらく、クラスに適切な名前を付けていません。しかし、他にどのような名前を付けるべきかはわかりません。
私のライブラリーのほとんどのマネージャーは、これらのクラスで構成されています(ただし、多少異なります)。
- コンテナ-マネージャ内のオブジェクトのコンテナ
- 属性-マネージャー内のオブジェクトの属性
ライブラリの新しいデザインには、ライブラリを結び付けるために、これらの特定のクラスがあります。
ComponentManager-エンティティシステムのコンポーネントを管理します
- ComponentContainer
- コンポーネント属性
- シーン*-シーンへの参照(以下を参照)
SystemManager-エンティティシステム内のシステムを管理します
- SystemContainer
- シーン*-シーンへの参照(以下を参照)
EntityManager-エンティティシステム内のエンティティを管理します
- EntityPool-エンティティのプール
- EntityAttributes-エンティティの属性(これはComponentContainerおよびSystemクラスのみがアクセス可能です)
- シーン*-シーンへの参照(以下を参照)
シーン-すべてのマネージャーを結び付ける
- ComponentManager
- SystemManager
- EntityManager
Sceneクラス自体にすべてのコンテナ/プールを配置することを考えていました。
すなわち
これの代わりに:
Scene scene; // create a Scene
// NOTE:
// I technically could wrap this line in a createEntity() call in the Scene class
Entity entity = scene.getEntityManager().getPool().create();
これは次のようになります。
Scene scene; // create a Scene
Entity entity = scene.getEntityPool().create();
しかし、私にはわかりません。後者を実行する場合は、Sceneクラス内で多くのオブジェクトとメソッドを宣言することになります。
ノート:
- エンティティシステムは、ゲームに使用される単純なデザインです。コンポーネント、エンティティ、システムの3つの主要部分で構成されています。コンポーネントは単なるデータであり、エンティティを区別するためにエンティティに「追加」することができます。エンティティは整数で表されます。システムには、特定のコンポーネントを持つエンティティのロジックが含まれています。
- ライブラリのデザインを変更しているのは、かなり変更できると思うからです。現時点では、その感じやフローが気に入らないのです。