Javascript 在gameloop中未正确读取数组值

Javascript 在gameloop中未正确读取数组值,javascript,arrays,loops,Javascript,Arrays,Loops,我正在创建一个在画布上显示随机点的程序,但当我给它指定哪些点应该保持亮起的规则时,我遇到了问题。我创建了一个具有匹配数组的画布,因此对于X个像素,在2D数组中存在一个对象。数组的创建如下所示: <code> //create array ctx.grid = [] for (var i = 0; i < canvasSize; i++) { ctx.grid.push([]); for (var e = 0; e < canvasSize; e++) { ctx.

我正在创建一个在画布上显示随机点的程序,但当我给它指定哪些点应该保持亮起的规则时,我遇到了问题。我创建了一个具有匹配数组的画布,因此对于X个像素,在2D数组中存在一个对象。数组的创建如下所示:

<code>
//create array
ctx.grid = []
for (var i = 0; i < canvasSize; i++) {    
ctx.grid.push([]);
for (var e = 0; e < canvasSize; e++) {
ctx.grid[i].push({light:false, clean:true})
}
}

</code>
当我在没有findCorners()函数的情况下运行该程序时,它运行平稳,这意味着数组的设置是正确的,但是if语句给了我问题。在开发人员工具上,我遇到以下错误:

无法读取未定义的属性“9”

这出现在我对代码的注释行上,“数字”总是不同的


我在我的代码中添加了最后一个控制台日志,因为奇怪的是,当我用这些行运行程序时,程序运行时没有任何错误,尽管它运行得非常慢,并且使我的浏览器在一段时间后崩溃。

因此,我在其他注释中发现我错了

未检测到边缘导致您索引到数组中未设置的部分,从而导致这些奇怪的消息,这是您所有的问题

我把它缩小一点看它

从中获得的重要信息是修复
findCorners()开头的检查:

if(y>0&&x>0&&y

这是指向我所有代码的链接。我不确定你所有的问题。但首先(y!=0 | | x!=0 | | y!=canvasSize | | | x!=canvasSize)总是正确的(对于canvasSize!=0,无论如何),我不知道这是否是您在应用程序中真正想要的行为。您可能希望单独测试每个邻居是否处于边缘像素的有效位置,因为它们仍然有2个或3个有效邻居。
<code>

setInterval(gameLoop,10);

function gameLoop() {
    //Get a random number from 0 to canvasSize
    var light = Math.floor(Math.random()*(canvasSize*canvasSize));
    var row = parseInt(light/canvasSize);
    var col = light%canvasSize;
    ctx.grid[row][col].light = true;

    //Find which points need to be drawn
    for (var i = 0; i < ctx.grid.length; i++) {
        for (var e = 0; e < ctx.grid[i].length; e++) {
            if (ctx.grid[i][e].light) {

                drawPoint(i,e);
                findCorner(i,e);
                clearPoint(i,e);                                                        


                 }
            }
        }
    }

  </code>
<code>
  function findCorner(y,x) {
 //Avoid corners
  if (y != 0 || x != 0 || y != canvasSize || x != canvasSize) { 

    if (ctx.grid[y-1][x].light) { //Cannot read property '9' of undefined 
      //another set of rules
       }
    // console.log(ctx.grid);
    // console.log(y);
    // console.log(x);
    // console.log(ctx.grid[y-1][x]);

</code>