Javascript游戏-无法读取;“是”;未定义属性

Javascript游戏-无法读取;“是”;未定义属性,javascript,html,collision-detection,2d-games,Javascript,Html,Collision Detection,2d Games,所以我今天在做这个游戏,一切都很完美,但有时这个错误会出现。我知道这意味着什么,我以前也有过,但这次没有意义。游戏运行得非常好,但有时当子弹与敌人相撞时,游戏会冻结。我甚至不知道该尝试什么了。顺便说一句,如果错误没有立即出现,请继续播放。代码如下: 太空射手 * { 保证金:0; } 帆布{ 背景:url(“http://www.ufointernationalproject.com/wp-content/uploads/2017/03/space-03.jpg"); } var ctx=d

所以我今天在做这个游戏,一切都很完美,但有时这个错误会出现。我知道这意味着什么,我以前也有过,但这次没有意义。游戏运行得非常好,但有时当子弹与敌人相撞时,游戏会冻结。我甚至不知道该尝试什么了。顺便说一句,如果错误没有立即出现,请继续播放。代码如下:


太空射手
* {
保证金:0;
}
帆布{
背景:url(“http://www.ufointernationalproject.com/wp-content/uploads/2017/03/space-03.jpg");
}
var ctx=document.getElementById(“画布”).getContext(“2d”),
lastShot=Date.now(),
燃速=120,
项目符号=[],
敌人=[],
敌人速度=1.5,
速度=20,
玩家={
x:600,
y:250,
左:错,
对:错,,
支持:错误,
沮丧:错,
空格:错,
速度:5
};
var playerImage=新图像();
playerImage.src=”https://3.bp.blogspot.com/-jGC08Dy0zg8/U405cNq1-MI/AAAAAAAABqU/38d5rmV1S8Y/s1600/redfighter0006.png";
var enemyImage=新图像();
enemyImage.src=”https://a.fsdn.com/con/app/proj/partartspace/screenshots/Spaceship14.png/1";
函数spawnemes(){
推({
x:Math.floor(Math.random()*1250)+1,
y:-100
})
}
设定间隔(产卵期,500);
函数绘图(){
clearRect(0,0,canvas.width,canvas.height);
ctx.drawImage(playerImage,player.x,player.y,100100);
if(player.leftPressed){
player.x-=player.speed;
}
如果(按播放器右键){
player.x+=player.speed;
}
如果(播放器已升级){
player.y-=player.speed;
}
如果(播放器被按下){
player.y+=player.speed;
}
如果(按player.space&&Date.now()-lastShot>fireRate){
子弹,推({
x:玩家。x+50,
y:球员,y
});
lastShot=Date.now();
}   
项目符号.forEach(函数(项目符号){
ctx.beginPath();
弧(bullet.x,bullet.y,5,0,2*Math.PI);
ctx.fillStyle=“红色”;
ctx.fill();
bullet.y-=子弹速度;
}); 
敌人。forEach(功能(敌人){
ctx.drawImage(enemyImage,敌方.x,敌方.y,100100);
敌人.y+=敌人速度;
}); 
对于(var敌人=0;敌人<敌人长度;敌人++){
如果(player.x<敌人[敌人].x+80&&
玩家.x+80>敌人[敌人].x&&
玩家.y<敌人[敌人].y+65&&
玩家.y+100>敌人[敌人].y)
{
document.location.reload();
}
用于(变量bullet=0;bullet敌人[bullet].y&&
子弹[子弹].x<敌人[敌人].x+100&&
子弹[子弹].x>敌人[敌人].x)
{
项目符号。拼接(项目符号,1);
敌人。拼接(敌人,1);
}                   
}   
}
请求动画帧(绘制);
}
draw();
document.body.addEventListener(“向下键控”,函数(e){
如果(例如keyCode===37){
player.leftPressed=true;
}
否则如果(e.keyCode===39){
player.rightspressed=true;
}
否则如果(e.keyCode===38){
player.upPressed=true;
}
否则如果(e.keyCode===40){
player.downPressed=true;
}
否则,如果(e.keyCode===32){
player.spacePressed=true;
}
});
文件.正文.附录列表(“键控”,功能(e){
如果(例如keyCode===37){
player.leftPressed=false;
}
否则如果(e.keyCode===39){
player.rightspressed=false;
}
否则如果(e.keyCode===38){
player.upPressed=false;
}
否则如果(e.keyCode===40){
player.downPressed=false;
}
否则,如果(e.keyCode===32){
player.spacePressed=false;
}
});

问题似乎出在拼接时。如果不退出循环,则在删除后会访问无效位置。

将此代码段设置为发生错误的第92行。
未捕获类型错误:无法读取绘图处未定义的属性“y”
第102行抱歉,这是我本地文件的第92行,但这里是102号,我刚刚在拼接后添加了break,现在效果非常好。非常感谢你,伙计!