我正在尝试实施碰撞检测算法,但它无法正常工作 我有一个名为sprite的对象数组 物体具有x和y中心点以及半径或宽度和高度属性。 我的函数如果碰撞就从数组中删除对象。 当我运行它时,所有对象都被删除了。 我该如何解决? 我的代码:
function colision() {
for (var i = 0; i < sprites.length; ++i) {
for (var j = 0; j < sprites.length; j++) {
if (i == j) {
j++
}
var spr1 = sprites[i],
spr2 = sprites[j]
if (spr1.shape == "circle" && spr2.shape == "circle") {
if (spr1.r + spr2.r >= Math.sqrt((spr1.x - spr2.x) ** 2 + (spr1.y - spr2.y) ** 2)) {
spr2.noise.stop();
sprites.splice(j, 1);
spr1.noise.stop();
sprites.splice(i, 1);
--i
continue;
}
} else if (spr1.shape == "rect" && spr2.shape == "rect") {
spr2.noise.stop();
sprites.splice(j, 1)
spr1.noise.stop();
sprites.splice(i, 1)
--i
continue;
}
if (spr1.shape == "circle" && spr2.shape == "rect") {
var gradient = Math.abs((spr1.y - spr2.y) / ((spr1.x - spr2.x) || 0.00000001))
var point = {}
if (spr1.x > spr2.x && spr1.y > spr2.y) {
point.x = spr1.x - spr1.r / gradient;
point.y = spr1.y - spr1.r / gradient;
if (point.x < (spr2.x + spr2.w / 2) && point.y < (spr2.y + spr.h / 2)) {
spr2.noise.stop();
sprites.splice(j, 1);
spr1.noise.stop();
sprites.splice(i, 1);
--i;
continue;
};
}
if (spr1.x < spr2.x && spr1.y > spr2.y) {
point.x = spr1.x + spr1.r / gradient;
point.y = spr1.y - spr1.r / gradient;
if (point.x > (spr2.x - spr2.w / 2) && point.y < (spr2.y + spr.h / 2)) {
spr2.noise.stop();
sprites.splice(j, 1);
spr1.noise.stop();
sprites.splice(i, 1);
--i;
continue;
};
} else if (spr1.x < spr2.x && spr1.y < spr2.y) {
point.x = spr1.x + spr1.r / gradient;
point.y = spr1.y + spr1.r / gradient;
if (point.x > (spr2.x - spr.w / 2) && point.y > (spr2.y - spr2.h / 2)) {
spr2.noise.stop();
sprites.splice(j, 1);
spr1.noise.stop();
sprites.splice(i, 1);
--i;
continue;
};
} else if (spr1.x > spr2.x && spr1.y < spr2.y) {
point.x = spr1.x - spr1.r / gradient;
point.y = spr1.y + spr1.r / gradient;
if (point.x < (spr2.x + spr.w / 2) && point.y > (spr2.y - spr.h / 2)) {
spr2.noise.stop();
sprites.splice(j, 1);
spr1.noise.stop();
sprites.splice(i, 1);
--i;
continue;
};
}
}
}
}
}