在我的游戏引擎中,这是用C写的,我已经离开了古典的层次实体系统,并建立了一个基于组件的体系.它大致以这种方式工作:
实体只是组件的容器.一些示例组件是:Point,Sprite,Physics,Emitter.
每个实体最多可以容纳每种类型的一个组件.某些组件依赖于另一个组件,如Physics和Sprite依赖于Point,因为它们需要由其传递的位置和角度.
所以一切都适用于组件系统,但现在我无法实现更专业的实体,如:
>相机,需要附加功能来处理移动和缩放
>一个播放器,需要支持从用户接收输入并移动
现在,我可以很容易地用继承来解决这个问题.只需从实体派生相机,并添加附加的缩放功能和成员.但这只是感觉错了.
我的问题:
>如何使用C中的组件系统解决专门实体的问题?
解决方法
你似乎怀疑这里的IS-A关系.那么为什么不使它成为HAS-A的关系呢?相机和播放器不是作为实体,而是可以是具有实体(或对实体的引用)但存在于组件系统之外的对象.这样,您可以轻松保持组件系统的均匀性和正交性.
这也很适合这两个例子(摄像机/播放器)作为“胶”对象的含义.播放器将实体系统粘贴到输入系统并充当控制器.相机将实体系统粘贴到渲染器,并作为一种观察者.