我正在尝试在连接两个点的线和位图蒙版之间实现有效的碰撞检测。
示例:
目前我正在使用Bresenham's line drawing algorithm绘制两点之间线条的每个像素,并将该像素与位图进行比较(如果像素为黑色则返回true,否则继续绘制线条。)
collision(x0,y0,x1,y1) {
let dx = Math.abs(x1 - x0),
dy = Math.abs(y1 - y0),
sx = (x0 < x1) ? 1 : -1,
sy = (y0 < y1) ? 1 : -1,
err = dx - dy,
e2
// loop through line drawing
while (!((x0 == x1) && (y0 == y1))) {
e2 = err << 1;
// check line point x,y against bitmap
if (bitmap[x0][y0] == 1) {
return 1;
}
if (e2 > -dy) {
err -= dy;
x0 += sx;
}
if (e2 < dx) {
err += dx;
y0 += sy;
}
}
// If looped through whole line and not returned collision return false
return 0
}
这是一种好/有效的方法吗?或者是否有针对此问题的固定方法或更好的方法?
提前致谢。