我正在制作一个基于组件的游戏引擎,并尝试通过使用这种设计尽可能地将数据与逻辑分开:
Engine
/ | \
EntityManager ComponentManager SystemManager
(vector of entities) (map of (entities - vector of components)) (vector of systems)
基本上所有这些管理者只是相应的实体、组件和系统的持有者。
这些的简要描述是:
实体:代表游戏中每个对象的类(只是和 UUID)。
组件:一个抽象类(它的子类)将仅保存有关实体的特定事物的数据,例如前。PositionComponent 将仅具有 Entity 的 x,y 值。
系统:一个抽象类(它的子类)将具有作用于实体的所有逻辑,例如。PositionSystem 将在 Engine 传递的 Process() 方法中包含一个要操作的实体,并使用一些预定义的逻辑更改其组件值。
我的问题是,如何让对象像这样进行通信?例如,如何从系统(驻留在 SystemManager 中)向 ComponentManager 发送消息,以便我可以获得系统正在处理的当前实体的特定组件(我已经在 ComponentManagers 中有方法来执行此操作,因此我的问题是什么是正确的设计方式来做到这一点)?或者一般来说,一个像操作系统一样建模的程序
(从内核到外部世界的层级)如何实现每一层之间的通信?是否有任何好的设计模式对此有用?
任何帮助表示赞赏。