我正在编写一个轻量级游戏引擎,并且在为它做一些研究的同时,我遇到了许多令人信服的文章,它们提倡通过“组件集合”模型而不是“从具体类继承”模型来实现游戏对象。有很多优点:
- 可以使用数据驱动设计技术组合对象,允许设计人员在不涉及程序员的情况下提出新对象;
- 源文件依赖项往往更少,从而可以更快地编译代码;
- 整个引擎变得更加通用;
- 可以避免必须更改继承层次结构较高的具体类的不可预见的后果;
- 等等。
但是系统的某些部分仍然不透明。其中主要是同一对象的组件如何相互通信。例如,假设在游戏中模拟子弹的对象是根据以下组件实现的:
- 一些用于视觉表示的几何图形
- 世界地位
- 用于与其他对象碰撞的体积
- 其他事情
在渲染时,几何图形必须知道它在世界中的位置才能正确显示,但它如何在对象中的所有兄弟组件中找到该位置?并且在更新时,碰撞体积如何找到对象在世界中的位置以测试它与其他对象的交集?
我想我的问题可以归结为:好的,我们有由许多组件组成的对象,每个组件都实现了一些功能。这在运行时工作的最佳方式是什么?