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

Sam*_*Sam 10 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;
}
Run Code Online (Sandbox Code Playgroud)

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

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

Kor*_*nel 2

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

\n\n

快速而肮脏的解决方案(对对角移动的对象给出误报) \xe2\x80\x94 检查覆盖当前帧和前一帧中对象位置的边界框之间的碰撞。

\n\n

代替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),等等。

\n\n

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

\n