当我运行此命令时,无论何时worldgeny == 400我都不知道为什么会发出警报。
如果我在同一位置提醒worldgeny,则会提醒NaN。我可能还没有很好地解释这一点。如果您感到困惑,请问。
我的代码很乱,我知道这只是对我个人的测试
提前致谢

var addy;
var worldgeny = parseInt(200);
var mul5 = parseInt(0);
var endhole;
var holegen;
var sizeh = 30;
var sizew = 30;
var savey = [];

function cworld() {
    mul5++;
    posX++;
    canvasContext.drawImage(imageGround, posX, worldgeny, 1, 400);
        if(mul5 % 30 == 0){
            if(worldgeny==400){
                endhole = mul5/30;
                endhole = endhole - 1;
                worldgeny=savey[endhole];
                alert(savey[endhole])
            }
            addy = parseInt(Math.floor((Math.random()*30)-17));
            holegen = parseInt(Math.floor((Math.random()*5)));
            worldgeny += addy;
            if(holegen==1){
                worldgeny = 400;
            }
            savey.push(worldgeny);
        }
    }
setInterval(cworld, 1);

最佳答案

var savey = [];


这是一个空数组。

alert(savey[endhole])


不管endhole是什么,由于undefinedsavey.length,所以它的计算结果是0

savey.push(worldgeny);


这实际上将元素添加到savey。在执行此操作之前,每次尝试引用该数组的元素时,它将返回undefined

此外,请确保endhole是有效索引。如果savey的长度为N,请确保endhole0N-1之间。

编辑:看起来真正的罪魁祸首是您分配的endhole。首先,您说endhole = mul5/30,但是mul50,所以现在endhole0。之后,您将其递减,将endhole的值保留为-1,这是数组中的无效索引。

我不确定要解决此问题的逻辑,但是您的索引必须为0或更大。引用数组的索引-1将始终导致undefined

09-28 08:54