0

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

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

4

1 回答 1

0

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

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

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

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

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

如果创建 CollisionComponent 或 Physik 组件,则 Physik 和 MoveComponent 必须进行通信,对吗?

From the diagrams you linked to you seem to be using the systems-based approach (similar to artemis). From my reading I believe that this is one area that has been generally agreed on by the community: in the system approach the idea is to centralize the component logic so that (aside from a few simple methods as mentioned in the answer to Yannabe's second question) the component is little more than a data container. So if your components are stored in entities then your systems are required to sift through all of your entities. The systems that require more than one component should be asking each entity for all the components it needs to do its work. If it doesn't find all of those components the system should move on. So based on what you have decided so far the answer is no, components should not be communicating with eachother.

Anyway, good luck on this.

于 2013-08-27T15:03:31.513 回答