如何检测快速移动物体之间的碰撞

时间:2013-05-09 12:57:00

标签: javascript html5 canvas

一般来说,为了检测帆布游戏中的碰撞,我会使用以下内容:

function collides(a, b) {
   return a.x < b.x + b.width &&
     a.x + a.width > b.x &&
     a.y < b.y + b.height &&
     a.y + a.height > b.y;
}

但是,如果在处理帧时对象正在触摸,则这仅检测冲突。如果我有一个精灵,其速度(以像素/帧为单位)大于其路径中障碍物的宽度,它将通过障碍物而不会检测到碰撞。

我如何检查精灵和目的地之间的内容?

2 个答案:

答案 0 :(得分:2)

这通常是一个难题,对于高质量的解决方案,像Box 2D库这样的东西会很有用。

快速而肮脏的解决方案(在对角移动的对象上产生误报) - 检查覆盖当前和之前帧中对象位置的边界框之间的碰撞。

而不是a.x使用min(a.x, a.x - a.velocity_x),而不是a.x + a.width使用max(a.x + a.width, a.x + a.width - a.velocity_x)等。

如果快速移动的物体很小(子弹),则测试线(从原点到原点+速度)和其他物体的框之间的碰撞。

答案 1 :(得分:0)

您应该使用移动物体扫描的整个区域(在更新间隔中)作为边界框来检查障碍物。