1

我搜索了碰撞检测主题,但它们都是关于检测本身的。我的问题更多是关于检测过程之前和之后的。我正在编写我的第一个大型游戏,我想让它尽可能高效。

游戏的前提是您在运动场周围驾驶一艘船。在这个领域将是由环境、敌舰和在太空中飞行和漂浮的弹丸提供的不同性质的障碍物。如果需要或想要,这些对象将能够围绕它们的中心等旋转。

我设置测试的想法是让对象以某种方式将自己加载到队列和列表中。然后,游戏将获取队列前面的任何内容,并针对列表中的所有内容进行测试。它会首先检查以确保列表中的东西不是它自己(这会一直为所有东西产生冲突,哈哈)。接下来,游戏将检查队列中的对象与列表中的对象之间是否存在碰撞。如果发生碰撞,它将标记对象说它们已经碰撞并保存引用或对象碰撞的任何内容。

例如,如果 A 与 B 发生碰撞,游戏将告诉 A 运行碰撞函数,B 运行碰撞函数,并将对 B 的引用存储到 A 中,并且 B 将存储对 A 的引用。

然后,游戏将继续检查队列中对象的碰撞,直到它遍历列表,每次都执行上述操作以说明一个对象击中或被多个对象击中。

例如,如果有三个球,A、B 和 C,并且 A 在同一帧中同时被 B 和 C 击中,则 A 的速度会先由 B 再由 C 修改,而 B 和 C 将由 A 修改它们的速度。

这会是一个聪明的方法吗?我现在并不担心碰撞的实际检测,有很多可用的文章或教程加上我自己的想法来解决这个问题。我没有遇到任何谈论之前和之后的事情。我不确定队列和列表中有多少东西会开始导致大量负载并减慢游戏速度。现在我的对象都只是 x,y 位置、x,y 速度、它们面对的方向以及其他一些东西。

现在我想我开始喋喋不休地谈论无关的事情了。任何见解或智慧将不胜感激。

4

1 回答 1

2

对于许多游戏开发主题,没有通用答案,这取决于您的游戏类型,但在遍历对象时请记住一些事项:

  • 试着想想在碰撞检测之后你将如何做实际的反应(你会使用双重调度、访问者、向下转换/rtti、存储可以在函数映射中使用的特征,...)。有多种技术,都有其优点和缺点。您选择的方法可以反映您如何进行实际遍历。
  • 尝试将场景拆分为对象类型。例如,如果您有许多永远不会移动的静态对象,那么将它们全部相互测试是荒谬的,您应该将它们分开。但是作为经验法则,不要尝试过多地专门化这个,拥有类似staticvs的东西dynamic可能会带来很大的好处,拥有 100 种类型会产生维护地狱,通常没有真正的收益。
  • 这可能与您的遮挡机制有关。例如,如果它是基于门户的,则来自不同单元的对象不太可能发生碰撞。

我现在可能忘记了其他一些技巧,因为这是一个复杂的话题,但我希望它能让你继续前进。

于 2012-04-27T16:49:44.787 回答