JavaScript Canvas 碰撞检测:全面解析及代码实现
要进行碰撞检测,需要知道对象的位置和尺寸。假设有两个对象 A 和 B,它们的位置分别为 Ax, Ay 和 Bx, By,宽度分别为 Aw 和 Bw,高度分别为 Ah 和 Bh。
'上是否发生碰撞':当 A 的底部坐标 Ay+Ah 大于等于 B 的顶部坐标 By,且 A 的顶部坐标 Ay 小于等于 B 的顶部坐标 By+Bh 时,发生碰撞。
'下是否发生碰撞':当 A 的顶部坐标 Ay 小于等于 B 的底部坐标 By+Bh,且 A 的底部坐标 Ay+Ah 大于等于 B 的底部坐标 By 时,发生碰撞。
'左是否发生碰撞':当 A 的右侧坐标 Ax+Aw 大于等于 B 的左侧坐标 Bx,且 A 的左侧坐标 Ax 小于等于 B 的左侧坐标 Bx+Bw 时,发生碰撞。
'右是否发生碰撞':当 A 的左侧坐标 Ax 小于等于 B 的右侧坐标 Bx+Bw,且 A 的右侧坐标 Ax+Aw 大于等于 B 的右侧坐标 Bx 时,发生碰撞。
可以使用以下代码实现碰撞检测:
function isColliding(Ax, Ay, Aw, Ah, Bx, By, Bw, Bh) {
// 上是否发生碰撞
if (Ay + Ah >= By && Ay <= By + Bh) {
return true;
}
// 下是否发生碰撞
if (Ay <= By + Bh && Ay + Ah >= By) {
return true;
}
// 左是否发生碰撞
if (Ax + Aw >= Bx && Ax <= Bx + Bw) {
return true;
}
// 右是否发生碰撞
if (Ax <= Bx + Bw && Ax + Aw >= Bx) {
return true;
}
return false;
}
使用时,将对象 A 和 B 的位置和尺寸传入 isColliding 函数,根据返回值判断是否发生碰撞。
原文地址: https://www.cveoy.top/t/topic/pgpc 著作权归作者所有。请勿转载和采集!