我正在制作一个基于组件的游戏引擎,我试图通过使用这个设计尽可能地将数据与逻辑分开:
Engine
/ | \
EntityManager ComponentManager SystemManager
(vector of entities) (map of (entities - vector of components)) (vector of systems)实际上,所有这些管理人员都只是实体、组件和系统的持有者。
这些功能的简要描述如下:
Entity:表示游戏中每个对象的类(just和UUID)。
Component :一个抽象类,它(它的子类)将只为一个实体保存关于特定事物的数据,例如ex。PositionComponent将只有一个实体的x,y值,仅此而已。
系统:一个抽象的类,它(它的子类)将拥有作用于Enities的所有逻辑,例如。PositionSystem将在引擎传递的Process()方法中拥有一个要操作的实体,并使用一些预定义的逻辑更改其组件值。
我的问题是,我如何让对象像这样传递数据呢?例如,我如何将消息从系统(驻留在SystemManager中)发送到ComponentManager,这样我就可以获得系统正在处理的当前实体的特定组件(我在ComponentManagers中已经有了执行此操作的方法,因此我的问题是,如何设计正确的方法来执行此操作)?或者通常是被建模的程序
就像操作系统一样(从内部内核到外部世界的各个层次),如何实现每一层之间的通信?有没有什么好的设计模式可以用来达到这个目的?
感谢您的帮助。
发布于 2015-06-22 19:10:18
进行松散耦合通信的一种常见方法是消息传递。基本上,每个组件都有一个收件箱,其他组件将消息发送到该收件箱。你也可以做一些事情,比如广播给群组等等。
您应该记住,高级别的抽象可能会影响性能,而在游戏中,您需要高性能。所以你应该小心你代码的热点部分,也就是那些会被频繁调用的部分,
https://stackoverflow.com/questions/17073652
复制相似问题