Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript问题-未捕获类型错误:无法读取属性';x';未定义的_Javascript_Html - Fatal编程技术网

Javascript问题-未捕获类型错误:无法读取属性';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

我正在做一个游戏,其中矩形画在屏幕的顶部,然后向下移动到底部。矩形最初将在屏幕上绘制,然后它们将消失,我将得到错误“JavaScript Uncaught TypeError:无法读取未定义的属性“X”

下面是代码,错误在“sprite.Rect.X”行

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