我正在實施一個自定義空間侵略者在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 =假):
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的左側NT。 據我所知,很難說清楚我的問題很高興澄清。
繪製函數的過濾器僅繪製陣列的有源元件:
logoArray.forEach(function(logo_slice){
logo_slice.draw();
});
感謝您的幫助,您可以給!
'isCollide'的代碼在哪裏?這不是你的代碼中最相關的部分嗎? – smarx
回答這個問題所需的一切都在你沒有提供的代碼中 - 'isCollide' – Jamiec
另外,你打算執行每像素碰撞檢測嗎?或者只是矩形重疊檢測? – Arnauld