好的,我正在尝试加载二维阵列并遇到一些问题。这是我的代码:
var blockSize = 30;
var level = new Array(new Array(0, 1, 0, 1, 0, 1, 0, 1, 0, 1), new Array(1, 0, 1, 0, 1, 0, 1, 0, 1, 0));
var blockArray = new Array(1);
blockArray[0] = new Array(1);
function readLevel() {
for (var i = 0; i < level.length; i++) {
for (var j = 0; j < level[i].length; j++) {
var tempImg = new Image();
tempImg.src = "images/block.png";
blockArray[i][j] = new block(i * blockSize, j * blockSize, level[i][j], false, false, tempImg);
//throw('blockArray['+i+']'+j+'] = ' + level[i][j]);
}
}
}
这是我的错误:
Firebug's log limit has been reached. 0 entries not shown. Preferences
blockArray[i] is undefined
[Break On This Error] blockArray[i][j] = new block(i *...level[i][j], false, false, tempImg);
我该如何解决这个问题?
答案 0 :(得分:5)
i
上的外部循环将来自0
.. 1
(含)。你永远不会将blockArray[1]
设置为任何东西,所以它是未定义的。因此,您的blockArray[i][j] = ...
行会失败,因为您无法索引未定义的值(blockArray[i]
= i
时未定义1
)。
我不完全确定你的代码应该做什么,但无论如何这应该让你接近:
var blockSize = 30;
var level = [
[0, 1, 0, 1, 0, 1, 0, 1, 0, 1],
[1, 0, 1, 0, 1, 0, 1, 0, 1, 0]
];
var blockArray = [];
function readLevel() {
for (var i = 0; i < level.length; i++) {
blockArray[i] = []; // Create the second level for this index
for (var j = 0; j < level[i].length; j++) {
var tempImg = new Image();
tempImg.src = "images/block.png";
blockArray[i][j] = new block(i * blockSize, j * blockSize, level[i][j], false, false, tempImg);
//throw('blockArray['+i+']'+j+'] = ' + level[i][j]);
}
}
}
请注意,我也放弃了new Array(n)
语法,转而使用数组文字语法。我认为你在这里做的事情更清楚。
重要的是要意识到JavaScript并不真正拥有数组,它当然没有2D数组。 JavaScript“数组”实际上只是对一类属性名称(完全由数字组成)并具有特殊length
属性的特殊处理的对象。 (当然,他们拥有从Array.prototype
继承的所有功能。)More here.
答案 1 :(得分:0)
尝试在两个for循环之间添加这些行
blockArray[i] = new Array();
创建第二级数组。
function readLevel() {
for (var i = 0; i < level.length; i++) {
blockArray[i] = new Array();
for (var j = 0; j < level[i].length; j++) {
[etc]
}
}
}