我正在制作一个基于组件的游戏引擎,我尝试使用这种设计尽可能地将数据与逻辑分开:
Engine
/ | \
EntityManager ComponentManager SystemManager
(vector of entities) (map of (entities - vector of components)) (vector of systems)
基本上所有这些管理器都相应地只是实体、组件和系统的持有者。
对这些的简要描述是:
实体:表示游戏中每个对象的类(仅和 UUID)。
Component :一个抽象类(它的子类)将只保存关于实体的特定事物的数据,例如 ex。 PositionComponent 将仅具有实体的 x、y 值。
系统:一个抽象类(它的子类)将具有作用于实体的所有逻辑, 前任。 PositionSystem 将在其 Process() 方法中通过引擎传递一个实体来操作,并使用一些预定义的逻辑更改其组件值。
我的问题是,如何让对象像这样交流 senario?
例如,我如何从系统(驻留在 SystemManager 中)向 ComponentManager 发送消息,以便我可以为系统正在处理的当前实体获取特定组件(我已经在 ComponentManager 中有方法来执行此操作,因此我的问题是什么是正确的设计方式来做到这一点)?或者通常是一个被建模的程序
像一个操作系统(从内核到外部世界的层)如何实现每一层之间的通信?是否有任何好的设计模式可用于此目的?
感谢任何帮助。
最佳答案
进行松散耦合通信的一种常见方式是消息传递。 基本上每个组件都有一个收件箱,其他组件将消息发送到该收件箱。 您还可以执行向群组广播等操作。
您应该记住,高度抽象会影响性能,而在游戏中您需要高性能。 所以你应该小心你代码的热部分,意思是那些会被非常频繁调用的部分,
关于c++ - 为使用对象聚合的程序设计通信系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17073652/