在javascript中使用多维数组时未定义

时间:2012-01-11 20:55:34

标签: javascript arrays

我正在用js写一个小的“pacman”游戏。我正在使用html5和canvas,它很顺利。但我想从运行在多维数组上的规范中绘制一个地图。当我使用普通数组时,它就像一个魅力,但是当我使用我的多维数组时,它只是警告“错误的”,这很难过。

我认为这是因为这个块:

function getMapArray() {
// define the yvalue of the map
// will be ytile later..
var items = new Array(1);
for(var i = 0; i < 2; i++) {
    items[i] = new Array(xtile);
}

items[0][0] = "0010";
items[0][1] = "0010";
items[0][2] = "0010";
items[0][3] = "0010";
items[0][4] = "0010";
items[0][5] = "0010";
items[0][6] = "0010";
items[0][7] = "0010";
items[0][8] = "0010";
items[0][9] = "0010";
items[0][10] = "0010";
items[0][11] = "0010";
items[0][12] = "0010";
items[0][13] = "0010";
items[0][14] = "0010";

return items;
}

但我不确定。 它可能很容易,但我已经长时间盯着代码了,它说xtile是未定义的,即使我用整数切换它。

链接到完整来源: http://pastie.org/3168446

JsFiddle演示: http://jsfiddle.net/928wU/

感谢您的帮助!

3 个答案:

答案 0 :(得分:1)

尝试使用var items = [];(内部类似)代替new Array

如果您能收到实际的错误消息,那将会有所帮助。

答案 1 :(得分:1)

您的getMap不会抛出错误。它返回一个长度为2的数组。第一个元素是一个长度为max(xTile,15)的数组,前15个索引填充了所有相同的字符串。第二个元素是长度为xTile的数组,每个索引都为空(未定义)。我不知道这是否是理想的。

但现在,请查看您发布的代码here

function drawMap(map) {
    //draw the x
    for(i = 0; i < map.length; i++) {
        entry = map[i];
        for(j = 0; j < entry.length; j++) { 
            if(i == 0 && j == 0)
                fillCanvas(map[x], x, x+40, 40, 40);
            else
                fillCanvas(map[x], x*40, i*40, (x + 1) * 40, i*40);
        }
    }
}

这贯穿你的二维数组。但是,它会尝试接收地图的x属性。不是x画布的宽度???

答案 2 :(得分:0)

您将数组初始化为1长度。那太小了?