0

这是我当前的代码:JSFiddle

在第 36 行:tempX = x + k - seedSeparation / 2;给出错误。如果我更改tempXxk或者seedSeparation / 2它有效。

代码摘录:

var mapX = 1000,
mapY = mapX,
seedLess = 3,
seedSeparation = 32, //Even number
canSeed, tempX, tempY,
x, y, seedNum = Math.round(((mapX + mapY) / 2) / seedLess);

var map = [];

for (i = 0; i <= mapX; i++){
    map[i] = [];
    for (k = 0; k <= mapY; k++){
        map[i][k] = 0;
    }
}
x = Math.floor((Math.random()*mapX)+1);
y = Math.floor((Math.random()*mapY)+1);
for (l = 0; l <= seedSeparation; l++){
    for (k = 0; k <= seedSeparation; k++){
        tempX = x + k - seedSeparation / 2; //Here lies the problem
        tempY = y + l - seedSeparation / 2;
        if(tempX >= 0 || tempY >= 0){
            if(map[tempX][tempY]){
                canSeed = false;
            }
        }
    }
}

这里有什么问题?为什么这个计算会给我一个错误?

4

1 回答 1

1

看看小提琴,问题不在你标记的那一行,而是在下面几行:

if(map[tempX][tempY]){

这意味着 inmap中的值没有条目tempX,因此map[tempX]为您提供了该值undefined。然后您尝试执行 (in effect) undefined[tempY],但由于您无法从中读取属性值而失败undefined

您可以重写它以防止这种可能性:

if(map[tempX] && map[tempX][tempY]){
于 2013-11-03T13:19:17.293 回答