为了更好地学习C ++,我编写了一个小游戏。虽然在项目变得太大之前,我想重组它。
事实上,我已经有十几个课程了,我觉得我是以错误的方式组织的。
例如,当我必须写这样的东西时:
(*((*(m_positionComponents))[(*it)])).posX = 0;
我认为我的课程结构存在问题。
我正在为我的游戏使用实体组件系统(ECS),并总结一下:
我有来自xxxComponent
和Component
的{{1}}个类,它们将所有组件存储在与不同组件一样多的映射中。然后我有一个ComponentManager
,它存储所有实体及其拥有的组件(使用二进制掩码)和一个继承自EntityManager
的{{1}}类,它们在每次更新时修改组件。例如,当调用xxxSystem
的更新函数时,它将遍历所有同时拥有System
和MovementSystem
的实体,并根据以下内容修改位置。速度(也可能改变速度)。
我的PositionComponent
课程链接了所有内容。现在我的问题是我需要访问很多类中的一些数据。
例如,VelocityComponent
包含对所有要更新它们的系统的引用,Application
必须能够访问EntityManager
中的组件存储以及实体和掩码的存储来自MovementSystem
,ComponentManager
需要位于EntityManager
的实体和面具的向量...
因此所有的指针,虽然只有一个指针从ComponentManager
访问位置组件,另一个指针是因为我通过指针将组件的实例存储在向量中。
然而,我不知道向每个班级发送对所有其他班级的实例的引用是否最佳,以便他们可以访问彼此的存储。
你们觉得怎么样?有没有更好的方法来组织这个ECS?