Javascript 当我将数组值设置为0以外的任何值时,它返回“0”;未捕获类型错误:无法设置属性“0”;1-15“';“未定义”的定义;
我目前正在尝试制作一个地图生成器,但在我随机设置块为land的部分中,如果我将它们设置为0或“”以外的任何值,它将返回 未捕获的TypeError:无法设置未定义的属性“1-15” (它不返回“1-15”,只是在运行时返回一个介于1和数组长度(15)之间的数字)Javascript 当我将数组值设置为0以外的任何值时,它返回“0”;未捕获类型错误:无法设置属性“0”;1-15“';“未定义”的定义;,javascript,arrays,html5-canvas,Javascript,Arrays,Html5 Canvas,我目前正在尝试制作一个地图生成器,但在我随机设置块为land的部分中,如果我将它们设置为0或“”以外的任何值,它将返回 未捕获的TypeError:无法设置未定义的属性“1-15” (它不返回“1-15”,只是在运行时返回一个介于1和数组长度(15)之间的数字) //让一块土地周围的每个街区都有三分之一的机会获得更多的土地 for(设y=0;y
//让一块土地周围的每个街区都有三分之一的机会获得更多的土地
for(设y=0;y 对于(让i=-1;i让我们简化一下这个问题。您看到的实际错误是因为您正在访问代理[a][B]
,其中代理[a]
未定义,因此您得到无法设置未定义的属性B
请考虑一下a
可以得到哪些可能的值。a
在代码中是y+i
。您将y
从0
循环到proxy.length-1
,并将i
从-1
循环到1
因此,y+i
的可能范围将是-1
到proxy.length
。这在两个方向上都比应该的多1项!(您会同意proxy[-1]
可能未定义,与proxy.length]
相同)
当然,x+j
也是如此,但这不会引发错误,因为它只会在proxy[something][1]
处写入新属性,例如,这可能不是有意的,但却是有效的JavaScript
因此,您必须更改循环或约束值。由于这是固定大小贴图上的贴图生成器,我想约束结果更符合逻辑。因此,您可以执行以下操作:
if(
y+i>=0&&
y+i=0&&
x+j<代理[y+i]。长度
) {
代理[y+i][x+j]=“o”
}
……或者:
if((y+i)在代理中&(x+j)在代理[y+i]中){
代理[y+i][x+j]=“o”
}
//lets every block surrounding a land peice have a 1 in 3 chance of making more land
for(let y = 0; y < proxy.length; y++){
for(let x = 0; x < proxy[y].length; x++){
if(proxy[y][x] != 0){
for(let i = -1; i <= 1; i++){
for(let j = -1; j <= 1; j++){
let run = Math.floor(Math.random() * 3)
if(run == 0){
proxy[y + i][x + j] = "o"
}
}
}
}
}
}