Jar*_*rom 12 c++ components entities
在我用C++编写的游戏引擎中,我已经离开了传统的分层实体系统,并构建了一个基于组件的系统.它大致以这种方式工作:
实体仅仅是组件的容器.一些示例组件是:Point,Sprite,Physics,Emitter.
每个实体最多可以容纳每种类型的一个组件.有些组件依赖于另一个组件,比如Physics和Sprite依赖于Point,因为它们需要一个位置和角度.
因此,组件系统的一切正常,但现在我无法实现更专业的实体,例如:
现在,我可以通过继承轻松解决这个问题.只需从实体派生相机并添加其他缩放功能和成员.但这只是错了.
我的问题:
ltj*_*jax 14
你似乎在怀疑这里的IS-A关系.那么为什么不把它变成一个HAS-A关系呢?相机和播放器可以是具有实体(或对实体的引用)但存在于组件系统之外的对象,而不是实体.这样,您可以轻松保持组件系统的一致性和正交性.
这也非常适合这两个例子(相机/播放器)作为"粘合"对象的含义.播放器将实体系统粘合到输入系统并充当控制器.相机将实体系统粘合到渲染器并充当一种观察者.
| 归档时间: |
|
| 查看次数: |
9909 次 |
| 最近记录: |