在最后几天,我找到了基于编译的实体系统。 我想我理解并知道它是如何工作的,但如果我尝试实现它,我会遇到很多问题。 这里有一个问题最多的图表: http://s7.directupload.net/file/d/3327/pzy7kanj_jpg.htm 我想知道,我可以将两个相同的组件添加到一个实体,或者我不应该允许这个? 如果不是,我如何向实体添加多个精灵? 如果制作CollisionComponent或Physik组件,Physik和MoveComponent必须进行通信,对吧? 我希望有人能帮助我。
在这里,我从想法中制作了另一张图: http://s1.directupload.net/images/130725/5p83qysu.jpg
答案 0 :(得分:0)
好的,这篇文章和你链接的图表之间似乎有很多相关的问题。这些问题的答案是“取决于”。而且我猜你想要一些关于CBSE主题的指导,而不是一行回答你的所有问题。我不会尝试根据类似的查询反复讨论,而是会在这里发布一些链接,让你更多地思考这些问题。
首先是ES wiki。这个维基仍然处于起步阶段,但它对实体系统进行了一些很好的讨论。
接下来,在gamedev stack exchange进行了一些非常富有成效的讨论(也许这个问题也应该移到那里)。首先看一下this question,这是一个很好的起点,因为它解释了为什么ES设计没有明确的趋势(当答案被写出来的时候),而且从我看到它今天仍然如此。然后由absolutely amazing answer给出Byte56,它非常好地解释了系统组件方法的基础知识,即使您认为已经掌握了它,也非常值得一读。接下来是Yannbane提出的一系列有用的问题。这些问题更详细地解决了一些细节问题。以下是all three questions。此外,还有一些关于如何整合input和Game States的问题。
最后,您应该查看一些受到很多关注的开源实体系统,例如用Java编写的Artemis(现在似乎有一个服务器问题,但是this article是一个很好的介绍,并且有c#和c++个存储库,所以你可以深入研究一些代码)。 AS3中也有ash。
现在我觉得我必须直接回答你的一个问题:
如果制作CollisionComponent或Physik组件,Physik和MoveComponent必须进行通信,对吗?
您链接到的图表似乎使用了基于系统的方法(类似于artemis)。从我的阅读中我相信这是社区普遍认同的一个领域:在系统方法中,想法是集中逻辑,以便(除了{{3的答案中提到的一些简单方法)组件只是一个数据容器。因此,如果您的组件存储在实体中,那么您的系统需要筛选所有实体。需要多个组件的系统应该向每个实体询问其工作所需的所有组件。如果 找不到所有这些组件,系统应该继续。因此,根据您迄今为止所做的决定,答案是否定的,组件不应该相互通信。
无论如何,祝你好运。