识别基于组件的游戏引擎中的组件

问题描述:

我已经阅读了大量关于基于组件的游戏体系结构的文章,所以我决定实现一个简单的系统来测试这个体系结构。识别基于组件的游戏引擎中的组件

我已经实现了一个通用的游戏节点,它只是一个基本的组件列表和一些添加和删除这些组件的方法。我也有属于某个节点的消息列表,以方便他们之间的通信。

这个例子只有拥有枪的机器人(有基本的'枪'枪以及具有不同属性的派生类型等等),他们互相射击并将结果打印到控制台。每当他们中的一个射中另一个时,就会在后者的列表中发布一条消息,其中MSG_SHOT代码和损伤量作为参数。这工作正常。

但是,我决定给一些枪增加“范围”,使其伤害加倍。然而,我真的找不到一种武器来检查它的一个孩子是否是一个范围,而没有实际地遍历它们。有几个基本的解决方案,但我的目标是一个通用的解决方案(不只是添加一个'范围'字段的枪,并保持它如果没有范围为空)。如果我想要将各种不同的效果附加到枪支上,那该怎么办?我将如何能够使他们影响我的枪支组件的'射击'方法?

当我们调用'shoot'时,是否应该遍历所有枪支的儿童,看他们是否有能力影响枪声?我不认为依靠组件名称会有好处。也许我希望在有任何范围可用时获得一定的效果,但是对于特定范围的范围来说,这是一个奇特的效果。

预先感谢任何指针,是的,我已经张贴此之前阅读吨的文章/问题,我还是很遗憾,困惑... :(

+0

我添加了一个简单的查询函数,该函数在某个节点的树中搜索某个类型,并返回第一个结果,否则返回null。迄今为止工作很好。除此之外,消息系统似乎工作正常。如果该项目的接收方所在的节点的发送消息函数返回结果通用对象,否则返回null。这种解释是否存在重大问题? –

你所拥有的细节给我你的设置的,这是我有什么,但请展开,如果这听起来像我误解你的布局。

的计算相关的对象应该是物体内完成。

所以要... ''当我们调用'shoot'时,我是否应该遍历所有枪支的孩子,看他们是否有能力影响枪声'...是的,因为范围影响在发送信息之前枪的工作应该在枪侧完成的伤害输出。我会看到它在某种'CalcDamageDelt'中设置,在这种'CalcDamageDelt'中,信息从枪传递给每个附件,以产生枪支总输出损伤。

一旦枪支输出计算出来,结果将打包并发送给接收者。然后接受者会计算出伤害的任何抵抗(装甲),并应用结果。

从你的评论,它听起来像这是你走的路线,但更奇异的方法(返回null或不),而不是一个寄宿生'将你的影响施加到我的伤害'。所以我认为你会朝着一个好的方向前进。

+0

感谢您的回复! :D不是,返回可以返回任何东西,比如一个String,比如“嘿,你打我”或者一个状态对象或者任何东西。我应该担心这些检查的额外开销吗?如果这个枪真的很复杂,有很多孩子,那么我就不得不循环所有这些来检查一个范围?这不会影响我的游戏的表现吗?在大多数“常规”中,直接层次结构方法基本上只是一个O(1)操作,如if(scope!= null){...} –

+0

好吧,另一个实用性问题 - 单位对象总是有一个'stats'节点,box2d之一和图形精灵之一。这些领域需要相当多的交互和查询,添加对它们的引用是不好的做法?哦,现在又出现了另一个问题 - 我应该区分'正义组件'和实际的实体吗?就像对单位和玩家对象等实体应用更宽松的规则一样,除了限制性的“儿童”阵列之外,还允许直接引用等内容? –

+0

我想我对范围部分的评论是,我会尝试保留枪组件内的任何需要范围的计算。只要触发器计算而不仅仅是每帧检查,甚至可以循环100次。如果你需要外部物品来检查一个范围,那么我会采取你的方法,也许让枪知道它可以有一个范围并缓存结果。 – TurqMage