我正在努力使基于组件的实体设计成为现实。
我的第一步是创建可以添加到对象中的各种组件。对于每种组件类型,我都有一个管理器,该管理器将调用每个组件的更新功能,并根据需要传入诸如键盘状态之类的信息。
我要做的下一件事是删除对象,并让每个组件都带有一个ID。因此,对象是由具有相同ID的组件定义的。
现在,我在想我不需要所有组件的管理器,例如,我有一个SizeComponent
,它只是一个Size
属性)。结果,SizeComponent
它没有更新方法,并且管理器的更新方法不执行任何操作。
我的第一个想法是要有一个ObjectProperty
组件可以查询的类,而不是将它们作为组件的属性。因此,一个对象有许多ObjectProperty
和ObjectComponent
。组件将具有查询对象属性的更新逻辑。管理者将管理调用组件的更新方法。
在我看来,这似乎是工程过度,但我认为我无法摆脱这些组件,因为我需要让管理人员知道哪些对象需要哪种组件逻辑才能运行(否则,我只会删除该组件)并将其更新逻辑推入管理器)。
- 难道这(有
ObjectProperty
,ObjectComponent
和ComponentManager
班)在工程? - 有什么好的选择?
RenderingComponent
和a使用PhysicsComponent
。我是否在考虑将财产放在何处的决定?我应该只将其插入其中一个,然后让另一个查询具有所需属性的组件的对象吗?
PhysicalStateInstance
(每个对象一个)和GravityPhysicsShared
(每个游戏一个);但是我很想说这正在进入建筑师兴高采烈的境界,不要让自己陷入困境(正是我对第一个组件系统所做的事情)。吻。
SizeComponent
是过大的-您可以假设大多数对象都具有一定的大小-使用渲染,AI和物理等原理来使用组件模型;Size始终具有相同的行为-因此您可以共享该代码。