Я реализую пользовательский захват пространства, как в HTML/javascript. Пока все работает нормально, но обнаружение столкновений кажется проблемой. После поиска нескольких решений в Интернете, вот что я до сих пор.Обнаружение столкновений в javascript
Мои враги представлены в массиве, как это:
function Logo(I){
I = I || {};
I.sprite = new Image();
I.active = true;
I.width = 25;
I.height = 25;
I.explode = function(){
this.active = false;
}
I.draw = function(){
context.drawImage(I.sprite,this.x,this.y);
}
I.setRes = function(name){
this.sprite.src = name;
}
return I;
}
который заполняется следующим образом:
var logoArray = [];
for(i=0;i<logoData.length;i++){
logoArray.push(Logo({
x: logoData[i].x,
y: logoData[i].y
}));
logoArray[i].setRes("./graphics/logo_slices/logo_" + logoData[i].name + ".png");
console.log(logoArray[i].sprite.src);
}
Столкновение обрабатываются как это (enemy.explode сделать this.active = false):
function handleCollision(){
playerBullets.forEach(function(bullet) {
logoArray.forEach(function(enemy) {
if (isCollide(bullet, enemy)) {
enemy.explode();
bullet.active = false;
}
});
});
}
function isCollide(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;
}
Проблема в том, что она делает неактивным все, что находится слева от воздействия poi нт. Я понимаю, что довольно сложно изобразить мою проблему, так счастлив прояснить.
Функциональная Жеребьевка фильтры рисовать только активные элементы массива:
logoArray.forEach(function(logo_slice){
logo_slice.draw();
});
Спасибо за любую помощь вы можете дать!
Где код 'isCollide'? Разве это не самая важная часть вашего кода? – smarx
Все, что необходимо для ответа на этот вопрос, - это код, который вы не предоставили - 'isCollide' – Jamiec
Также планируете ли вы выполнить обнаружение столкновений на пикселях? Или просто обнаружение перекрытия прямоугольника? – Arnauld