管理游戏中子弹的最佳方式是什么?

问题描述:

我已经开始进入游戏开发;我已经完成了一些教程并阅读了大量文章,但是我不确定的一件事是管理大量临时对象的最佳方式,例如,子弹。管理游戏中子弹的最佳方式是什么?

如果每个实体管理自己的子弹,我应该有一个全球性的子弹经理或我应该创建每一颗子弹作为一个新的全面的单个对象(这似乎非常低效虽然)?

此外,使用组件模式应该怎么办性质,似乎通用时,例如位置,速度等。? 我读过的一些东西似乎认为所有东西都应该在某种组件中,而其他东西似乎认为通常会被各种组件访问的泛型属性应该是实体类本身的成员。

原谅我,这可能是简单的,但我要确保我在想在正确的方向。

非常感谢!

+1

我没有太多的经验,但看看Doom或Quake等游戏的源代码。 AFAIK,他们拥有像火箭这样缓慢移动/可见物体的“完整”物体,以及像子弹这样的“快速”/不可见物体,它可以“画”一条线并看它是否碰到某些物体(如光线跟踪)。但我没有真正检查过它。确保每个子弹/火箭/任何有确定的寿命(火箭在X秒后爆炸,子弹的“虚拟”线在Y米后结束以避免进入无限) – 2010-07-07 22:35:25

+1

值得注意的是,许多游戏并未实施子弹不仅仅是光线广播和结果。没有什么需要坚持的;玩家按下触发器,检查是否有什么东西会抓住“子弹”,损坏那个东西。我想你需要创造一些东西,如果你正在批量/推迟你的视线/碰撞测试,但它不一定是一个“子弹”对象。 – 2010-07-08 21:42:10

+0

我知道那个Dash,但我正在考虑沿着可能有大量可见射弹(认为是垂直射手或类似小行星的东西)的街机游戏。 感谢您的评论。 – JamesK89 2010-07-09 22:04:07

将每个子弹创建为“完全成形的对象”不应该效率太低 - 请查看Object pool pattern,其中概述了加速这些对象创建的方法。

至于你的问题回复:组件和通用性,这取决于你想如何严格遵循组件体系结构。如果你想对组件架构非常严格,每个属性都应该在一个组件中,而不同的组件应该相互交流。否则,出于效率原因,在主要对象中共享一些属性。有关更多信息,请查看组件行为模式this page

+0

谢谢你,我从来没有想过使用对象池作为子弹。 Stack Overflow存在的好事,否则我们会错过各种聪明的解决方案。 如果有其他人有任何补充,我想听听它并学习。 – JamesK89 2010-07-07 22:59:03

原始地震用来实体固定大小的池(其有时也被称为法令)。任何存在于帧之间的东西都是一个实体。这包括像世界和门一样的“形状物理”事物,怪物,玩家和指甲等矩形物理物体,武器等类型透明的物体,触发区域等不可见但可触摸的矩形物体,以及延迟事件等完全非物理事物。

我觉得地震的限制是一样的东西700个法令;如果超出限制,游戏将崩溃。我认为edicts只是存储在一个数组中,因为任何edict存在的每个属性都存在于它们中。