>我正在尝试构建一个网格并将网格的每个单元格存储为名为 grid 的数组中的对象。我已经将 grid 定义为全局变量,所以我可以使用 createGrid(( 填充它,然后使用 drawGrid(( 读取它。
我想将网格实现为画布动画教程的一部分。我的代码是:
var grid = [];
function drawGrid() {
for (var i = 0; i < cols; i++) {
grid[i] = [];
for (var j = 0; j < rows; j++) {
if (grid[i][j].food === 0) {
console.log("Has a good value")
}
}
}
}
function Cell(i, ii) {
this.i = i;
this.ii = ii;
this.food = false;
}
function createGrid() {
for (var i = 0; i < cols; i++) {
grid[i] = [];
for (var j = 0; j < rows; j++) {
grid[i][j] = new Cell(i, j);
}
}
}
function mainLoop() {
clearCanvas();
drawGrid();
requestAnimationFrame(mainLoop)
}
createGrid();
mainLoop();
我在调用循环之前创建了网格,因此一旦调用函数 drawGrid((,网格就已经被填充了。我没有将createGrid((放在循环中,因为不是每次都创建网格所必需的,还因为每次循环运行时都需要大量资源
浏览器在此处抛出错误:
if (grid[i][j].food === false) {
console.log("Has a good value")
}
由于测试的值是布尔类型,因此写if (grid[i][j].food === false) {
是无稽之谈。
您必须按如下方式编码:如果值为 true
,则if (grid[i][j].food) {
实现条件否则,如果我们想实现条件,如果它是假的:if (!grid[i][j].food) {
值 i 和 j 仍然需要正确(i = 零到 cols-1,等等(