碰撞检测及其效率

Kai*_*ili 4 collision-detection

你究竟如何实现碰撞检测?涉及的费用是多少?不同的平台(c/c ++,java,cocoa/iphone,flash,directX)是否有不同的优化来计算冲突.最后是否有可用于我的库,或者我可以为我的平台选择的一些库?

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

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

Fin*_*las 6

检查我的关于简单边界框碰撞检测的答案.

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

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

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

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

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

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