碰撞检测及其效率

时间:2010-04-23 19:50:10

标签: collision-detection

您如何实施碰撞检测?涉及的费用是多少?不同的平台(c / c ++,java,cocoa / iphone,flash,directX)是否有不同的优化来计算冲突。最后有哪些库可供我使用,或者我可以解释为我的选择平台?

据我所知,你需要遍历碰撞图并找到有问题的区域,然后将输入事物(例如精灵)与被质疑区域中的像素类型进行比较。我理解非常基本的想法,但我不了解底层实现,甚至不了解更高级别的实现。似乎这种类型的检测或任何此类检测都非常昂贵。瓷砖地图?位数组?这些是如何从图像中创建的(我猜想循环并做东西)?

我提出这个问题的原因是为了更好地了解幕后的效率,并准确了解正在发生的事情。链接,参考或示例将非常有用。我知道这个问题有点长,所以任何帮助或参考都会非常受欢迎。谢谢!

1 个答案:

答案 0 :(得分:6)

查看我的关于simple bounding box collision detection的答案。

碰撞检测是一个很大的话题,但原先有两个方面。宽相和窄相检测。宽相是快速而肮脏的,如果这通过你进入窄相位检测。在深度检测中,窄相反过来更复杂。即使在宽相位检测中检测到碰撞,物体也不会与任何物体发生碰撞。

在游戏中提高效率的关键是如果你不需要,就不要做。换句话说,如果您不必执行碰撞检测,请不要执行。我的意思是想象一个像GTA4这样的游戏。这将是疯狂的,如果您要检查每个对象与世界上的其他对象相比,游戏将像幻灯片一样运行。可以使用各种方法,但最好的方法是限制检查量。这里通过使用quad / oct / binary / trees或其他spatial indexing算法来分割世界。这意味着只检查附近的物体,因此游戏运行得更快,因为只检查可能的物体是否有碰撞。

  

这些是如何从图像创建的(我会猜测循环和做东西)?”

是和否。每像素碰撞检测属于窄相位检测,并且成本高。在大多数游戏中,根本不需要它。采用通用FPS。如果你在两腿之间射击敌人说,它有时被归类为击中,这不是像素完美,但它足够好。

对于2D游戏,你知道精灵的大小,所以任何计算都会使用一个边界体积。 3D游戏也是如此,除了这个边界体积现在是三维的。您可以将复杂的形状/模型分解为更多的边界体积。这个过程比检查像素要快得多。然而,有时需要每像素检测。这一切都取决于游戏的类型。

至于良好的链接,我会指向Gamedev.net。这是一个很好的入门网站,应涵盖各种主题。一个nice tutorial,向您展示可以应用的其他概念是基于一个名为N和N +的游戏的开发。总而言之,游戏是一种体验和幻觉。任何时候如果游戏程序员可以进行简化以加速开发或游戏,我们就会接受它。