Javascript 数组意外地填充了 NaN

Javascript Array gets filled with NaN unexpectedly

我目前正在制作一个小型卷轴 canvas 游戏,我正在尝试实现怪物。我为怪物保留了两个数组,一个用于它们的 x 位置,一个用于它们的 y 位置。由于某些意外原因,两个数组都填充了 1152 个元素,其中两个是预定义的,其他都是 "NaN"。

这是程序的 link: http://codepen.io/kenshin791011/pen/WpxQmg

(函数 monsterMove 是 运行 on key down)

var monsterx = [13, 5],
    monstery = [41, 42];
function monsterMove() {
    for(var i = 0; i < monsterx.length; i++) {
        var z = Math.floor(Math.random() * 4);
        switch(z) {
            case 0:
                monsterx[i] -= 1;
                break;
            case 1:
                monstery[i] -= 1;
                break;
            case 2:
                monsterx[i] += 1;
                break;
            case 3:
                monstery[i] += 1;
                break;
        }
    }
}

代码笔中 JS 的以下循环正在将元素 0 到 cGrid.lengthmonsterx 数组更新为:

for(var i = 0; i < cGrid.length; i++) {
    pGridx[i] += g;
    monsterx[i] += 1;
}

鉴于几乎所有这些索引的第一次 monsterx[i]undefined,而 undefined + 1NaN,这就是你如何获得一个充满 NaN - 除了以有效数字开头的前两个元素。

您有一个类似的循环来更新 monstersy

(为了将来参考,如果您不确定变量是如何更新的,第一步是搜索该变量的代码。这就是我为找到上述问题所做的全部工作。)