是否有现有的基于FOSS组件的框架?[关闭]


25

基于组件的游戏编程范例正变得越来越流行。我想知道,有没有提供可重用组件框架的项目?用任何语言,我想我都不在乎。不是为了我自己的项目,我只是很好奇。

具体来说,我的意思是说有一些项目包括一个基Entity类,一个基Component类,也许还有一些标准组件?如果您不想重新发明方向盘,或者想要GraphicsComponent使用Direct3D制作sprite 的游戏,那么开始游戏会容易得多,但是您认为它已经完成了十几次。

快速谷歌搜索出现了鲁舍尔。有人听说过吗/有人使用过吗?如果没有受欢迎的,那为什么不呢?使这种可重用的东西太难了,并且他们需要大量的自定义吗?在我自己的实现中,我发现很多样板都可以推入框架中。


4
您应该是第一个写一个的人!:)
Ricket

1
好吧,我为自己的项目用C#编写了一个。也许我们都可以做出贡献?
Tesserex

我完全愿意从事该C#项目。是的,关于标准的工作原理尚未达成共识,但也许我们可以专注于XNA(无论您的想法如何)。仅仅因为一堆巨头还没有宣布最佳方法,并不意味着我们不能尝试/实验。
Michael Coleman

也许是因为基于组件的设计比程序员更吸引项目经理
M. Utku ALTINKAYA 2012年

Answers:


45

如果没有受欢迎的,那为什么不呢?

因为在这种框架的运作方式上没有什么像共识。

在Gamedev.net上的一个线程上,我确定,当人们谈论基于组件的游戏系统时,基于3个不同的因素,实际上至少有8种可能的排列方式来期望它们的工作方式:

内侧还是外侧 -组件应该聚合到一个实体中,还是应该是子系统的一部分,并且仅由实体ID关联?

静态与动态合成 -实体应该由一组已知的组件(例如1个物理,1个动画,1个AI等)组成,这些组件可以通过众所周知的接口以代码形式进行通信,或者实体可以添加任意数量的组件它们(以及用于定位其他感兴趣组件的相关策略)

组件上的数据与实体上的数据 -数据应该由主要在其上运行的组件保存吗?还是应该将数据存储在实体中的所有组件都可以访问的共享空间中?

除了组件如何通信(通过共享数据?通过函数指针?通过信号/插槽?或者根本不?)以外,还有其他问题,它们应该如何更新(基于组件类型以固定顺序进行? -在创建时定义的实体顺序?基于组件相互依赖关系的拓扑排序?)等。

这些选择中的每一个都是完全任意的,用一个系统可以做的任何事情都可以用另一个系统做。但是在每种情况下,您编码的方式都非常不同。人们似乎对哪种方法最适合他们有强烈的意见。

现在,人们仍然对组件不能以某种方式替代面向对象(不是)(而不是面向对象)的想法感到困惑,并且还认为它们与传统的游戏制作方式相比是一个巨大的改变(同样,它们不是-人们已经将实体中的各个子系统排除在外了很长一段时间),因此存在很多夸张而不是太多的共识。也许几年后一切都会安定下来,人们会选择一种或两种相当标准的方法。


1
我很欣赏这个答案很旧,但是现在错了:存在流行的框架,关于该主题的讨论很少。在编写游戏时,上面的大多数问题都无关紧要:要么对代码的设计没有影响,要么一种方法快速且可重用,而其他方法则没有。在实践中,有很多流行的框架-在其他答案之一中链接的Wiki是一个很好的起点(我们中的许多人维护该框架是为了使其更容易找到实际发货的游戏+框架)
Adam

1
@Adam:我想要一个链接,详细介绍当时赢得达尔文进化比赛的方法。当我说细节时,我不想听到有关内侧和外侧的信息,我想听到有关散列映射,向量,分配器,私有,公共,循环,常量...低级别的细节。
v.oddou

@ v.oddou有人已经发布了指向Wiki的链接作为答案(请参见下文)。你想要细节吗?它充满了源代码
亚当

10

有一个Wiki收集了所有这些示例:

http://entity-systems.wikidot.com/

...以及不同方法之间的差异的解释。


事实证明Ash和Artemis(均在Wiki上)确实很受欢迎,它们都与业余游戏开发人员一起用于商业游戏开发。
亚当


2

有用于Flash的按钮引擎:http : //pushbuttonengine.com/

还有用于c ++ / python的Panda3D:panda3d dot com(对不起,我只允许每个帖子以n00b的形式发送1个网址)

我敢肯定那里还有更多吨:)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.