网格偏移一

Grid offset by one

好的,所以我一直在尝试让网格在我的 canvas 上工作。这是我得到的:

codepen link

for (var j = 0; j < rows; j++) {
    for (var i = 0; i < cols; i++) {
        var pix = new Pixel(i, j);
        grid.push(pix);
    }
}

现在,问题是在网格数组上,索引 0 上的像素实际上是第 2 个,最后一个是第 1 个。我想更改它,但我看不出代码中的问题所在。

看看你的 Pixel#draw() 函数:

this.draw = function () {
    rect(this.x, this.y, l, l);
    fill(0);
    stroke(20);
    if (this.on)
        fill(255);
}

逐行阅读这段代码,认真思考它到底在做什么。用一张纸和一支铅笔逐步浏览它,以准确了解发生了什么。

请注意,您首先 调用 rect() 函数,然后设置填充和描边。

这将导致每个方块具有 前一个 单元格的颜色。所以不是你的第一个 Pixel 位于第二个正方形,而是第二个 Pixel 是根据第一个 Pixel 的颜色绘制自己。根据最后一个 Pixel.

的颜色,第一个 Pixel 绘图本身也是如此

要解决您的问题,只需在调用 rect() 函数之前 设置笔划和填充

旁注:您可能还想养成在每个 if 语句中使用 { } 大括号的习惯,即使是像这样的一行:

if(this.one){
   fill(255);
}

这不会在您的代码中造成任何问题,但这是一个养成的好习惯。