【问题标题】:Component Based Entity System Problems基于组件的实体系统问题
【发布时间】:2013-07-24 23:20:01
【问题描述】:

最近几天我发现了基于组件的实体系统。 我想我理解并知道它是如何工作的,但是如果我尝试实施它,我会遇到很多问题。 这是一个问题最多的图表: http://s7.directupload.net/file/d/3327/pzy7kanj_jpg.htm 我想知道,我可以向一个实体添加两次相同的组件,还是不允许这样做? 如果不是,我如何向实体添加多个精灵? 如果创建 CollisionComponent 或 Physik 组件,则 Physik 和 MoveComponent 必须进行通信,对吗? 我希望任何人都可以帮助我。

在这里,我制作了另一个图表,来自 Ideas: http://s1.directupload.net/images/130725/5p83qysu.jpg

【问题讨论】:

    标签: entity entities


    【解决方案1】:

    好的,在这篇文章和您链接到的图表之间似乎有很多相关的问题。这些问题的答案是“视情况而定”。我猜你想要一些关于 CBSE 主题的指导,而不是你所有问题的一条线答案。我将在此处发布一些链接,而不是尝试根据类似的查询重复讨论,这些链接应该让您更多地思考这些问题。

    首先是ES wiki。这个 wiki 仍处于起步阶段,但它对实体系统进行了一些精彩的讨论。

    接下来,在gamedev stack exchange 进行了一些非常有成效的讨论(也许这个问题也应该移到那里)。首先看一下this question,这是一个很好的起点,因为它解释了为什么 ES 设计没有明确的趋势(当那个答案被写出来的时候),并且从我所看到的情况来看,它今天仍然适用。然后是Byte56 给出的absolutely amazing answer,它非常好地解释了系统组件方法的基础知识,即使您认为自己已经掌握了它,也值得一读。接下来是Yannbane 提出的一系列有用的问题。这些问题更详细地解决了一些更精细的问题。这里是allthreequestions。另外还有一些关于如何整合inputGameStates的问题。

    最后,您应该查看一些备受关注的开源实体系统,例如用 Java 编写的 Artemis(该链接现在似乎存在服务器问题,但 this article 是一个很好的介绍,并且有 c#c++ 存储库可用,因此您可以深入研究一些代码)。还有ash用AS3写的。

    现在我觉得我必须直接回答你的一个问题:

    如果一个碰撞组件或物理组件,物理和移动组件必须通信,对吧?

    从您链接到的图表看来,您似乎正在使用基于系统的方法(类似于 artemis)。根据我的阅读,我相信这是社区普遍认同的一个领域:在系统方法中,想法是集中组件逻辑,以便(除了Yannabe's second question 的答案中提到的一些简单方法之外) ) 该组件只不过是一个数据容器。因此,如果您的组件存储在实体中,那么您的系统需要筛选所有实体。需要多个组件的系统应该向每个实体询问其工作所需的所有组件。如果它没有找到系统应该继续运行的所有这些组件。因此,根据您目前的决定,答案是否定的,组件不应该相互通信。

    无论如何,祝你好运。

    【讨论】:

      猜你喜欢
      • 2011-07-04
      • 1970-01-01
      • 2018-01-05
      • 2020-09-15
      • 2011-12-26
      • 2016-01-23
      • 2014-07-06
      • 2016-11-05
      • 1970-01-01
      相关资源
      最近更新 更多