为使用对象聚合的程序设计通信系统

时间:2013-06-12 19:26:03

标签: c++ oop design-patterns game-engine

我正在制作基于组件的游戏引擎,我尝试使用此设计尽可能地将数据与逻辑分开:

                                      Engine
              /                          |                                \
     EntityManager            ComponentManager                         SystemManager
(vector of entities)      (map of (entities - vector of components)) (vector of systems)

基本上所有这些经理都是相应的实体,组件和系统的持有者。

这些的简要说明是:

实体:代表游戏中每个对象的类(只是和UUID)。

组件:一个抽象类(它的子类)将仅保存有关实体的特定事物的数据,例如ex。 PositionComponent将只有实体的x,y值。

系统:一个抽象类(它的子类)将拥有对Enities采取行动的所有逻辑, 恩。 PositionSystem将在其Process()方法中通过Engine和实体传递来操作,并使用一些预定义的逻辑更改其组件值。

我的问题是,如何让对象像这样传达一个像这样的传感器? 例如,如何从System(驻留在SystemManager中)向ComponentManager发送消息,以便我可以获取系统正在处理的当前实体的特定组件(我已经在ComponentManagers中使用了这些方法来执行此操作,因此我的问题是什么是正确的方式设计来做到这一点)?或者通常是建模的程序 像操作系统(从内核到外层的层)如何实现每一层之间的通信?是否有适用于此目的的良好设计模式?

任何帮助表示感谢。

1 个答案:

答案 0 :(得分:0)

进行松耦合通信的常用方法是发送消息。 基本上每个组件都有一个收件箱,其他组件将邮件发送到该收件箱。 你也可以做一些事情,比如向群组广播等。

你应该记住,高水平的抽象可以达到性能,而在游戏中你需要高性能。 所以你应该小心你的代码的热点部分,这意味着将经常调用的部分,