我正在尝试构建网格并将网格的每个单元作为对象存储在名为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")
}
答案 0 :(得分:0)
由于测试的值是布尔类型,所以写if (grid[i][j].food === false) {
是没有意义的。
您必须编写以下代码:if (grid[i][j].food) {
要在条件为true时实现条件
否则,如果我们想了解条件是否为假:if (!grid[i][j].food) {
仍然有必要确保i和j的值正确(i =等于cols-1的零,等等)