gpt4 book ai didi

实体系统 - 在管理器中与实体中存储组件

转载 作者:行者123 更新时间:2023-12-04 15:59:54 25 4
gpt4 key购买 nike

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

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

实体和管理器中的设计、组件是否会导致相同的最终结果?如果我误解/遗漏了什么,请告诉我。

最佳答案

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

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

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

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

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

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

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

关于实体系统 - 在管理器中与实体中存储组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12994073/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com