Javascript问题-未捕获类型错误:无法读取属性';x';未定义的
我正在做一个游戏,其中矩形画在屏幕的顶部,然后向下移动到底部。矩形最初将在屏幕上绘制,然后它们将消失,我将得到错误“JavaScript Uncaught TypeError:无法读取未定义的属性“X” 下面是代码,错误在“sprite.Rect.X”行Javascript问题-未捕获类型错误:无法读取属性';x';未定义的,javascript,html,Javascript,Html,我正在做一个游戏,其中矩形画在屏幕的顶部,然后向下移动到底部。矩形最初将在屏幕上绘制,然后它们将消失,我将得到错误“JavaScript Uncaught TypeError:无法读取未定义的属性“X” 下面是代码,错误在“sprite.Rect.X”行 var-gCanvas; 变量gLoopCounter; var gGameOver; var gSprites; 函数体_加载(){ gaminit(); gCanvas=canGame.getContext(“2d”); //canGame
var-gCanvas;
变量gLoopCounter;
var gGameOver;
var gSprites;
函数体_加载(){
gaminit();
gCanvas=canGame.getContext(“2d”);
//canGame.onMouseDown=canCanvas_onMouseDown(e);
setInterval(gameLoop,33);
}
函数gameInit(){
gLoopCounter=0;
gGameOver=false;
gSprites=新数组();
gSprites[0]=spriteNew(“绿黄色”,60,30,30,70);
gSprites[1]=spriteNew(“绿黄色”,176,30,30,70);
gSprites[2]=spriteNew(“绿黄色”,292,30,30,70);
gSprites[3]=spriteNew(“绿黄色”,408,30,30,70);
gSprites[4]=spriteNew(“绿黄色”,524,30,30,70);
gSprites[5]=spriteNew(“绿黄色”,176130,30,70);
gSprites[6]=spriteNew(“绿黄色”,292130,30,70);
gSprites[7]=spriteNew(“绿黄色”,408130,30,70);
gSprites[8]=spriteNew(“绿黄色”,292,230,30,70);
//船
gSprites[9]=spriteNew(“MediumSpringGreen”,230、950、150、20);
}
函数gameLoop(){
gameUpdate();
gameDraw();
}
函数gameUpdate(){
gLoopCounter++;
如果(gLoopCounter===30){
gLoopCounter=0;
对于(变量i=0;i
您需要移动gameUpdate
函数的右大括号,使其位于gameDraw
函数之前
不要将你的飞船包含在gSprites数组中,否则它将与其他矩形一起向下移动
还要学习javascript快捷方式,newobject()
,可以用{}
替换,新数组()可以用[]
替换
我做了编辑(我删除了on-body-load事件,因为jsfiddle为您处理此事件,所以将其添加回).它能告诉我们哪一行出现了错误吗?我认为提供一个JSFIDLE将帮助我们帮助您。您为
gameUpdate
函数错误地放置了右大括号。嗯,这是正确的,感谢您指出这一点。我仍然收到同样的错误我从来没有收到你的错误。一旦我移动了卷曲的支架,它几乎起了作用。我发布了你的游戏的工作版本。
var gCanvas;
var gLoopCounter;
var gGameOver;
var gSprites;
function body_load() {
gameInit();
gCanvas = canGame.getContext("2d");
//canGame.onMouseDown = canCanvas_onMouseDown(e);
setInterval(gameLoop, 33);
}
function gameInit() {
gLoopCounter = 0;
gGameOver = false;
gSprites = new Array();
gSprites[0] = spriteNew("GreenYellow", 60, 30, 30, 70);
gSprites[1] = spriteNew("GreenYellow", 176, 30, 30, 70);
gSprites[2] = spriteNew("GreenYellow", 292, 30, 30, 70);
gSprites[3] = spriteNew("GreenYellow", 408, 30, 30, 70);
gSprites[4] = spriteNew("GreenYellow", 524, 30, 30, 70);
gSprites[5] = spriteNew("GreenYellow", 176, 130, 30, 70);
gSprites[6] = spriteNew("GreenYellow", 292, 130, 30, 70);
gSprites[7] = spriteNew("GreenYellow", 408, 130, 30, 70);
gSprites[8] = spriteNew("GreenYellow", 292, 230, 30, 70);
//Ship
gSprites[9] = spriteNew("MediumSpringGreen", 230, 950, 150, 20);
}
function gameLoop() {
gameUpdate();
gameDraw();
}
function gameUpdate() {
gLoopCounter++;
if (gLoopCounter === 30) {
gLoopCounter = 0;
for (var i = 0; i < gSprites.length; i++) {
gSprites[i].Rect.Y += 5;
}
}
function gameDraw() {
gCanvas.fillStyle = "black";
gCanvas.fillRect(0, 0, 640, 1096);
for (var i = 0; i < gSprites.length; i++) {
var sprite = gSprites[i];
gCanvas.fillStyle = sprite.Color;
gCanvas.fillRect(
sprite.Rect.X,
sprite.Rect.Y,
sprite.Rect.Width,
sprite.Rect.Height);
}
if (gGameOver === true) {
gCanvas.fillStyle = "white";
gCanvas.font = "30px American Typewriter";
gCanvas.textBaseline = "middle";
gCanvas.textAlign = "left";
gCanvas.fillText("Game Over", 100, 200);
}
}
function spriteNew(color, x, y, width, height) {
var sprite = new Object();
sprite.Color = color;
sprite.Rect = rectNew(x, y, width, height);
return sprite;
}
function rectNew(x, y, width, height) {
var rect = new Object();
rect.X = x;
rect.Y = y;
rect.Width = width;
rect.Height = height;
return rect;
}
}