2

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

                                      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 中有方法来执行此操作,因此我的问题是什么是正确的设计方式来做到这一点)?或者一般来说,一个像操作系统一样建模的程序
(从内核到外部世界的层级)如何实现每一层之间的通信?是否有任何好的设计模式对此有用?

任何帮助表示赞赏。

4

1 回答 1

0

进行松散耦合通信的一种常见方法是消息传递。基本上每个组件都有一个收件箱,其他组件将消息发送到该收件箱。您还可以执行向群组广播等操作。

您应该记住,高级别的抽象会影响性能,而在游戏中您需要高性能。所以你应该小心你的代码的热点部分,这意味着会被非常频繁地调用的部分,

于 2015-06-22T11:10:17.757 回答