我目前正在为C ++ 重新设计我的实体系统,并且我有很多经理。在我的设计中,我有这些类,以便将我的库联系在一起。关于“经理”类,我听说过很多坏事,也许我没有适当地命名我的类。但是,我不知道还有什么名字。
在我的图书馆中,大多数经理都是由以下类组成的(尽管确实有所不同):
- 容器-管理器中对象的容器
- 属性-管理器中对象的属性
在我的图书馆新设计中,我有这些特定的类,以便将我的图书馆联系在一起。
ComponentManager-管理实体系统中的组件
- 组件容器
- ComponentAttributes
- 场景*-对场景的引用(请参见下文)
SystemManager-管理实体系统中的系统
- 系统容器
- 场景*-对场景的引用(请参见下文)
EntityManager-管理实体系统中的实体
- EntityPool-实体池
- EntityAttributes-实体的属性(只能由ComponentContainer和System类访问)
- 场景*-对场景的引用(请参见下文)
场景-将所有经理联系在一起
- 组件管理器
- 系统管理员
- 实体管理器
我当时只是想将所有容器/池放入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个主要部分组成:组件,实体和系统。这些组件只是简单的数据,可以将这些数据“添加”到实体中,以使这些实体与众不同。实体由整数表示。系统包含具有特定组件的实体逻辑。
- 之所以要更改我的库的设计,是因为我认为它可以进行很多更改,目前我不喜欢它的感觉/流程。