用于游戏的画布和javascript的碰撞

时间:2017-11-22 00:40:47

标签: javascript html5 canvas collision

我的游戏中出现了碰撞问题。 如果我射击敌人,我可以杀死他们。但是当他们射击我时,没有任何反应。碰撞算法不会以这种方式工作,只有当两次射击击中付款人时才有效...我不知道为什么......这是问题的重要部分。非常感谢! :

    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;
    }
}

0 个答案:

没有答案