Answers:
我个人认为没有任何好的例子,主要是因为游戏的“基于组件的系统”的定义过于宽松,以至于几乎没有意义。
您可能会发现此答案中的某些讨论很有帮助:如何为网络游戏中的物品实施基于组件的系统
总体而言,该方法只是将任何类型的GameObject或Actor从处理所有行为的大型类更改为保存执行行为的对象的简单类。我认为,自己动手做并制作适合您游戏的不同组件通常是最好的方法。
您可能会喜欢以下一些资源:
有一个了不起的线程。它本身不是游戏引擎,但是设计和讨论很棒。
关于StackOverflow的一个非常相似的问题。
为了回答最初的问题,C#中的Elephant框架正是您想要的:它已经停产,但是在这里仍然存在以供实现参考。
以上大部分内容受T = Machine上这篇文章的启发
受上述两个链接的启发,我开始了一个基本的实现。我敢肯定,我与纯组件系统理论大相径庭,毫无疑问,这里有bug,但是如果您要寻找一些简单的示例,它可能会很有用。
刚毛(C#/ XNA)
现在,它只是加载一些基本实体,处理一些事件等。您要查找的主要位置是Engine.EntitySystem文件夹,可能还有PlayScreen实际创建实体。
创建一个简单的基于类型的组件存储并将其隐藏在通用的EntityManager后面相对简单。
我遇到的第一个挑战是单个系统可能需要多种组件类型(即物理组件和InputMoveable)。要使用关系数据库语言,我必须找到一种进行JOIN查询的方法。为此,我为根据匹配的组件类型查询构建的实体创建了另一个集合类型-每个实体集合都挂接到OnEntityCreate事件中,并检查它是否匹配。还有一些错误。
第二个挑战实际上是创建一个“游戏对象”-我称它们为模板。在这里,根据T = Machine的规格,我可能不是很单纯,但是它似乎有效。模板将组件实例化分组在一起,并允许更容易的实体组成(即,“球是可绘制的”和“物理的”)。
希望这会有所帮助-实体/组件系统可能是克服一些初始障碍的挑战。
我还没有使用过,但仔细看过代码的另一个是Artemis。评论很好,很活跃。最初是Java框架,但已移植到C#/ XNA。