Javascript 未捕获类型错误:无法设置属性';1';未定义的

Javascript 未捕获类型错误:无法设置属性';1';未定义的,javascript,html,canvas,Javascript,Html,Canvas,现在这是wierd,我基本上调用函数“sortTiles()”两次,第一次,它循环通过,并返回一个漂亮的数组,就像它应该做的那样。但第二次调用时,它不起作用,并将标题中所述的错误抛出到特定行:tiles[y][x]=tile 第一次,从“sortTiles()”返回的数组被放入一个名为“solution”的全局数组中。第二次调用该函数时,它将从解决方案数组中获取瓷砖的X和Y坐标 我在这里做的是,它基本上扫描一个滑动拼图,借助html5画布和prnt_scrn+粘贴到网站上。如前所述,第一次做的时

现在这是wierd,我基本上调用函数“sortTiles()”两次,第一次,它循环通过,并返回一个漂亮的数组,就像它应该做的那样。但第二次调用时,它不起作用,并将标题中所述的错误抛出到特定行:tiles[y][x]=tile

第一次,从“sortTiles()”返回的数组被放入一个名为“solution”的全局数组中。第二次调用该函数时,它将从解决方案数组中获取瓷砖的X和Y坐标

我在这里做的是,它基本上扫描一个滑动拼图,借助html5画布和prnt_scrn+粘贴到网站上。如前所述,第一次做的时候,你可以截取一个解决方案的截图,粘贴进去,它可以很好地标出所有的坐标。第二次,它抛出一个错误:(

函数getTile(x,y){ var-id=0; 对于(i=0;i<2;i++){ 对于(i2=0;i2<2;i2++){ var data=context.getImageData(x+i*48+5-(i*10),y+i2*48+5-(i2*10),1,1); id+=数据[0]+数据[1]+数据[2]; } } 返回id; } 函数findTile(编号){ 对于(y=0;y<5;y++){ 对于(x=0;x<5;x++){ if(解决方案[y][x]==编号){ 返回[x,y]; } } } } 函数sortTiles(){ context.font=“20px格鲁吉亚”; var-tiles=[]; 瓦片长度=0; 对于(y=0;y<5;y++){ 瓷砖[y]=[]; 对于(x=0;x<5;x++){ var tile=getTile(108+x*56,34+y*56); 瓷砖[y][x]=瓷砖; if(solution.length!=0){ var坐标=FindFile(平铺); 填充文本(坐标[0]+“,“+坐标[1],108+x*56+12,34+y*56+36); }否则{ 上下文。填充文本(x+“,”+y,108+x*56+12,34+y*56+36); } } } 返回瓷砖; }
您的
x
y
变量是全局变量,在
sortTiles
findTile
之间存在冲突。请使用
var
将它们设置为本地变量

function getTile(x, y) {
    var id = 0;
    for (var i = 0; i < 2; i++) {
        for (i2 = 0; i2 < 2; i2++) {
            var data = context.getImageData(x + i * 48 + 5 - (i * 10), y + i2 * 48 + 5 - (i2 * 10), 1, 1).data;
            id += data[0] + data[1] + data[2];
        }
    }
    return id;
}

function findTile(number) {
    for (var y = 0; y < 5; y++) {
        for (var x = 0; x < 5; x++) {
            if (solution[y][x] == number) {
                return [x, y];
            }
        }
    }
}

function sortTiles() {
    context.font = "20px Georgia";
    var tiles = [];
    tiles.length = 0;
    for (var y = 0; y < 5; y++) {
        tiles[y] = [];
        for (var x = 0; x < 5; x++) {
            var tile = getTile(108 + x * 56, 34 + y * 56);
            tiles[y][x] = tile;
            if (solution.length != 0) {
                var coordinate = findTile(tile);
                context.fillText(coordinate[0] + ", " + coordinate[1], 108 + x * 56 + 12, 34 + y * 56 + 36);
            } else {
                context.fillText(x + ", " + y, 108 + x * 56 + 12, 34 + y * 56 + 36);
            }
        }
    }
    return tiles;
}
函数getTile(x,y){ var-id=0; 对于(变量i=0;i<2;i++){ 对于(i2=0;i2<2;i2++){ var data=context.getImageData(x+i*48+5-(i*10),y+i2*48+5-(i2*10),1,1); id+=数据[0]+数据[1]+数据[2]; } } 返回id; } 函数findTile(编号){ 对于(变量y=0;y<5;y++){ 对于(变量x=0;x<5;x++){ if(解决方案[y][x]==编号){ 返回[x,y]; } } } } 函数sortTiles(){ context.font=“20px格鲁吉亚”; var-tiles=[]; 瓦片长度=0; 对于(变量y=0;y<5;y++){ 瓷砖[y]=[]; 对于(变量x=0;x<5;x++){ var tile=getTile(108+x*56,34+y*56); 瓷砖[y][x]=瓷砖; if(solution.length!=0){ var坐标=FindFile(平铺); 填充文本(坐标[0]+“,“+坐标[1],108+x*56+12,34+y*56+36); }否则{ 上下文。填充文本(x+“,”+y,108+x*56+12,34+y*56+36); } } } 返回瓷砖; }
tiles
应该推入,而不仅仅是分配。谢谢您的快速回答!
function getTile(x, y) {
    var id = 0;
    for (var i = 0; i < 2; i++) {
        for (i2 = 0; i2 < 2; i2++) {
            var data = context.getImageData(x + i * 48 + 5 - (i * 10), y + i2 * 48 + 5 - (i2 * 10), 1, 1).data;
            id += data[0] + data[1] + data[2];
        }
    }
    return id;
}

function findTile(number) {
    for (var y = 0; y < 5; y++) {
        for (var x = 0; x < 5; x++) {
            if (solution[y][x] == number) {
                return [x, y];
            }
        }
    }
}

function sortTiles() {
    context.font = "20px Georgia";
    var tiles = [];
    tiles.length = 0;
    for (var y = 0; y < 5; y++) {
        tiles[y] = [];
        for (var x = 0; x < 5; x++) {
            var tile = getTile(108 + x * 56, 34 + y * 56);
            tiles[y][x] = tile;
            if (solution.length != 0) {
                var coordinate = findTile(tile);
                context.fillText(coordinate[0] + ", " + coordinate[1], 108 + x * 56 + 12, 34 + y * 56 + 36);
            } else {
                context.fillText(x + ", " + y, 108 + x * 56 + 12, 34 + y * 56 + 36);
            }
        }
    }
    return tiles;
}