我的游戏中出现了碰撞问题。 如果我射击敌人,我可以杀死他们。但是当他们射击我时,没有任何反应。碰撞算法不会以这种方式工作,只有当两次射击击中付款人时才有效...我不知道为什么......这是问题的重要部分。非常感谢! :
var enemiesShotsArray=new Array(5);
var enemiesShotStartValues={
//propieties of the enemiesShoots
posX: 10,
posY: 0, //300 es la normal para un rectangulo
width: 5,
height:5,
speed: 0.08
}
var baseCanonJson={
//propieties of the player
posX: 360,
posY: 348,
width: 100,
height: 80
}
for(var i=0;i<enemiesShotsArray.length;i++){
if(i==0){
enemiesShotsArray[i] = enemiesShotStartValues;
} else if (i==1) {
enemiesShotsArray[i] = enemiesShotStartValues;
} else if (i==2){
enemiesShotsArray[i] = enemiesShotStartValues;
} else if (i==3){
enemiesShotsArray[i] = enemiesShotStartValues;
} else if (i==4){
enemiesShotsArray[i] = enemiesShotStartValues;
}
}
function enemiesShoots(){
ctx.fillStyle='white';
for(var i=0;i<enemies.length;i++){
for(var j=0;j<enemiesShotsArray.length;j++){
enemiesShotsArray[j].posX=enemies[i].posX;
ctx.fillRect(enemiesShotsArray[j].posX+20,enemiesShotsArray[j].posY+20,10,10);
enemiesShotsArray[j].posY+=enemiesShotsArray[j].speed;
if(enemiesShotsArray[j].posY>canvas.height){
enemiesShotsArray[j].posY=0;
} else if(enemies.length<=3){
enemiesShotsArray[j].posY+=0.1;
}
}
}
}
function playerCollision(){ //COLLISION WHEN THE ENEMIES SHOOT TO THE PLAYER
for(var j=0;j<enemiesShotsArray.length;j++){
if(collisions(enemiesShotsArray[j],baseCanonJson)){ //if this is true, the code that will run is
lives--;
playerDamage();
alert(lives);
} else { console.log("nothing happen"); }
}
}
function collisions(d,e){ //algorithm of collision
if (d.posX < e.posX + e.width && d.posX + d.width > e.posX &&
d.posY < e.posY + e.height && d.posY + d.height > e.posY){
return true;
}
}