像许多有抱负的设计师和程序员一样,我偶然发现了实体/组件系统设计,包括关于该主题的各种优秀文章以及一些有效的实施方案.我和许多其他人一样,自己实施了这样一个系统.
从概念上讲,实体是一个组件包,它只不过是由一系列系统处理的数据包.所以我认为Entity对象可用于保存与之关联的所有组件,但其他人的工作则另有说法.在我的所有研究中,似乎几乎普遍认为实体只不过是一个ID,你必须不惜一切代价避免陷入面向对象思维的陷阱.他们建议将组件存储在管理器中,而不是直接解决这种设计的优点.
这两种设计,实体中保存的组件与管理器中的组件不会产生相同的最终结果吗?如果我误解/遗漏某些东西,请告诉我.
我绝不是实体组件系统方面的专家,但以下是我根据所读内容对这个主题的看法。
我认为你永远不应该直接访问组件。如果这样做,那么您的组件就会开始相互依赖,之后,当您决定要更改一个组件的行为方式时,所有依赖于您现在想要更改的组件的其他组件都必须得到修复。
为了避免这个问题,组件之间不应该了解任何信息。他们每个人都有一份工作,应该只专注于那份工作。如果需要来自另一个组件的某些数据(例如,您可能需要位置数据),您应该向另一个系统请求数据,或者开发一个消息传递系统。
当然,一旦你真正开始编码,很难 100% 遵守这条规则,但你明白了。
避免将组件存储在实体中的另一个原因是为了速度。当组件包含在系统中(所有类似组件存储在一起)时,您可以快速处理大量组件。您有机会设置它们可以重用的任何数据,循环并处理每个组件,然后释放任何重用的数据。不仅如此,每个系统可能(应该)能够在单独的线程上运行,这使您可以轻松地利用多个核心。
同样,在实践中,这并不总是 100% 正确,但这就是它的理论。
总之,将组件保留在系统中而不是实体中可以减少直接访问组件的诱惑,并允许在系统中进行批量更新。我希望这对您有所帮助,如果您有任何疑问,请告诉我。
| 归档时间: |
|
| 查看次数: |
2061 次 |
| 最近记录: |