7

像许多有抱负的设计师和程序员一样,我偶然发现了实体/组件系统设计,包括关于该主题的各种优秀文章和一些工作实现。我和许多其他人一样,自己承担了实施这样一个系统的责任。

从概念上讲,实体是一组组件,它们只不过是由一系列系统处理的数据包。所以对我来说,一个实体对象可以用来保存与之关联的所有组件似乎是合乎逻辑的,但其他人的工作却不然。在我所有的研究中,似乎几乎普遍认为实体只不过是一个 ID,您必须不惜一切代价避免落入面向对象思维的陷阱。他们建议将组件存储在管理器中,但不直接解决这种设计的优点。

实体和管理器中保存的两种设计、组件不会产生相同的最终结果吗?如果我误解/遗漏了什么,请告诉我。

4

1 回答 1

2

我绝不是实体组件系统方面的专家,但这是我对这个主题的看法。

我认为您永远不应该直接访问组件。如果这样做,那么您的组件开始相互依赖,然后,当您决定要更改一个组件的行为方式时,现在必须修复依赖于您要更改的组件的所有其他组件。

为避免此问题,组件之间不应相互了解任何信息。他们每个人都有一份工作,应该只专注于那份工作。如果需要来自另一个组件的某些数据(例如,您可能需要位置数据),您应该向另一个系统请求数据,或者开发一个消息传递系统。

当然,一旦你真正开始编码,很难 100% 地遵守这条规则,但你明白了。

避免在实体中存储组件的另一个原因是速度。当组件包含在系统中时(所有相似的组件都存储在一起),您可以快速处理大量组件。您有机会设置它们可能被重用的任何数据,循环并处理每个组件,然后释放任何重用的数据。不仅如此,每个系统可能(应该)能够在单独的线程上运行,这使您可以轻松利用多个内核。

同样,在实践中,这并不总是 100% 正确,但这就是它的理论。

总之,将组件保留在系统中而不是实体中可以减少直接访问组件的诱惑,并允许在系统中进行批量更新。我希望这会有所帮助,如果您有任何问题,请告诉我。

于 2012-11-07T03:33:55.113 回答