错误未定义的对象(而它已定义)

时间:2017-11-21 14:36:28

标签: javascript html5 canvas

我目前正在使用canvas(JavaScript)制作自上而下的射击游戏HTML5游戏,这是我的问题:

当我射击时,一个功能检查是否与敌人发生碰撞,如果是,它会摧毁敌人和子弹,但有时(随机)游戏发生冲突并返回错误:

uncaught TypeError: Cannot read property 'x' of undefined
at collides (game.js:274)
at checkBulletHits (game.js:177)
at Game (game.js:346)

在此错误中" undefined"是我射击的最后一颗子弹,但这次子弹是undefined,原因我不明白。

以下是涉及的代码:

var bullets = [];
var enemies = [];

function checkBulletHits() {
    if (bullets.length > 0 && enemies.length > 0) {
        for (j = bullets.length - 1; j >= 0; j--) {
            for (k = enemies.length - 1; k >= 0; k--) {
                if (collides(enemies[k], bullets[j])) {
                    enemies.splice(k, 1);
                    bullets.splice(j, 1);
                    player.points += 10;    
                }
            }
        }
    }
}

function collides(a, b) {
    return  a.x < b.x + b.w &&
        a.x + a.w > b.x &&
        a.y < b.y + b.h &&
        a.y + a.h > b.y;
}

checkBulletHits();

此处的完整代码:https://pastebin.com/H2Cw1g5j

1 个答案:

答案 0 :(得分:2)

当您发生碰撞时,您将删除索引j处的项目符号。然后循环继续到下一个敌人,并且在索引j处再次检查子弹。

该子弹不再存在,因此您正在呼叫collides(enemy, undefined) 然后,在collides中,这显然会引发错误:undefined.x

击中时突破循环。在return块的末尾添加if语句。