【发布时间】:2012-01-14 06:45:12
【问题描述】:
我在网上阅读了很多关于基于组件的游戏架构的文章,所以我决定实现一个简单的系统来测试这个架构。
我已经实现了一个通用的游戏节点,它只承载了一个基本的组件列表和一些添加和删除这些组件的方法。我还有一个属于某个节点的消息列表,以方便它们之间的通信。
该示例只有拥有枪支的机器人(有基本的“枪支”枪支以及具有不同统计数据的派生类型等),它们互相射击并将结果打印到控制台。每当其中一个射击另一个时,都会在后者的列表中发布一条消息,其中 MSG_SHOT 代码和伤害量作为参数。这工作正常。
但是,我决定为一些枪添加“瞄准镜”,使其伤害翻倍。但是,我真的无法找到一种方法让武器检查它的一个孩子是否是一个范围,而无需实际迭代它们。有一些基本的解决方案,但我的目标是一个通用的解决方案(不仅仅是在枪上添加一个“范围”字段,如果它没有范围,则将其保留为空)。如果我想在枪上附加无数其他具有各种效果的小玩意怎么办?我怎样才能让它们影响我的枪组件的“射击”方法?
我是否应该在调用“shoot”时遍历所有 guns 的孩子,看看它们是否能够影响枪声?我认为依赖组件名称不会有任何好处。当任何范围可用时,也许我想要某种效果,但对于特定类型的范围来说,我想要一个花哨的效果。
在此先感谢您的任何指点,是的,在发布此内容之前,我已经阅读了大量文章/问题,但遗憾的是,我仍然感到困惑...... :(
【问题讨论】:
-
我添加了一个简单的查询函数,它在节点的树中搜索某种类型,并返回第一个结果,否则返回 null。到目前为止工作得很好。除此之外,消息系统似乎工作正常。如果找到该项目的接收者,则节点的发送消息函数返回结果通用对象,否则返回 null。这种解释有什么重大问题吗?