我目前正在使用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
答案 0 :(得分:2)
当您发生碰撞时,您将删除索引j
处的项目符号。然后循环继续到下一个敌人,并且在索引j
处再次检查子弹。
该子弹不再存在,因此您正在呼叫collides(enemy, undefined)
然后,在collides
中,这显然会引发错误:undefined.x
。
击中时突破循环。在return
块的末尾添加if
语句。