一个列表中的所有游戏实体或按类型列出的几个列表?

时间:2011-05-19 19:25:34

标签: collision-detection

视频游戏通常会尝试保留一个实体列表并根据其类型更新它们吗?或者,开始看起来更方便,将每种类型保留在自己的列表中,或者至少概括并列出几个不同的列表?

在我的特定示例中,我有一个列表,其中包含所有类型,并检查它们的类型,根据需要对它们进行操作。相同的列表通过物理引擎和渲染引擎运行。现在我开始添加需要以同一种方式与其他相同类型的其他人进行反应的类型。

例如,'Enemy'类型需要检查与其他'敌人'的碰撞以避免堆叠(2D游戏),同时还需要针对碰撞检查玩家。如果敌人都在一个列表中,那肯定会更容易。

最重要的是,我正在寻找最佳实践。我意识到每个游戏都是不同的,一个尺寸不适合所有游戏,但必须有一些普遍的智慧。

2 个答案:

答案 0 :(得分:1)

据我所知,游戏中有几个用于多种目的的列表,例如它们使用某种对象层次结构,因此它们可以轻松跟踪所有对象位置,另一方面它们保持相同的指针。线性阵列,用于他们需要做的所有物理事物。我的意思是没有限制你有多少次可以对一个对象和一个指针通常具有非常小的成本(每个4个字节),所以只要你可以跟踪到某个实例的所有指针我认为最好方法是为不同的目的制作几个列表。在您管理场景的示例中,我更喜欢一些树(父子)数据结构,当您可以相对设置对象位置时,它会有很多帮助,并且可以使用相同的指针再次为物理引擎中的碰撞测试创建几个碰撞器和碰撞列表用于场景管理器。

答案 1 :(得分:0)

对于冲突,单独使用列表会很快耗尽性能,因为检查每个新对象对所有现有对象的指数性质。

为了保持平稳运行,通常会有一种广泛的碰撞检测方法,只能比较彼此合理接近的物体。

2D游戏中常见的两种方法是网格和四叉树。

以下是针对actionscript编写的四元树的一个相当不错的解释: http://lab.polygonal.de/2007/09/09/quadtree-demonstration/

这个论坛很好地解释了Quad Trees与网格的相对优点。

但是使用任何一个都可以大大加快碰撞循环,而不仅仅是比较列表。