JavaScript If 语句证明为真但输出为假

JavaScript If-Statement Proved True But Outputs False

我正在通过编写我的第一个游戏(一个简单的激光镜式游戏)来学习 JavaScript。游戏在网格中运行,我想确定一个单元格是否有障碍物。所以我调用这个函数:

function updateGrid () {
for (let i = 0; i < cols; i++) {
        for (let j = 0; j < rows; j++) {
            for (let o = 0; o < obstacles.length; o++) {
                if (grid[i][j].x === obstacles[o].x && grid[i][j].y === obstacles[o].y) {
                    grid[i][j].obstacle = true;
                } else if (grid[i][j].x != obstacles[o].x && grid[i][j].y != obstacles[o].y) {
                    //grid[i][j].obstacle = false;
                }
            }
            for (let m = mirrors.length - 1; m >= 0; m--) {
                if (grid[i][j].x + cellOffset.x== mirrors[m].x && grid[i][j].y + cellOffset.y == mirrors[m].y) {
                    grid[i][j].mirror = true;
                } else {
                    grid[i][j].mirror = false;
                }
            }
            if (grid[i][j].x + cellOffset.x == target.x && grid[i][j].y + cellOffset.y == target.y) {
                grid[i][j].target = true;
            } else {
                grid[i][j].target = false;
            }
            if (grid[i][j].x == laserPen.x && grid[i][j].y + (rowH / 2) - (cellOffset.y / 4) == laserPen.y) {
                grid[i][j].pen = true;
            } else {
                grid[i][j].pen = false;
            }
        }
    }
}

然而,判断单元格是否包含障碍物的 if 语句似乎不起作用。

这有效(将 grid[ i ][ j ].obstacle 设置为 true):

for (let o = 0; o < obstacles.length; o++) {
    if (grid[i][j].x === obstacles[o].x && grid[i][j].y === obstacles[o].y) {
            grid[i][j].obstacle = true;
    } else if (grid[i][j].x != obstacles[o].x && grid[i][j].y != obstacles[o].y) {
        //grid[i][j].obstacle = false;
    }
}

这不是(将 grid[ i ][ j ].obstacle 设置为 false):

for (let o = 0; o < obstacles.length; o++) {
    if (grid[i][j].x === obstacles[o].x && grid[i][j].y === obstacles[o].y) {
            grid[i][j].obstacle = true;
    } else if (grid[i][j].x != obstacles[o].x && grid[i][j].y != obstacles[o].y) {
        grid[i][j].obstacle = false;
    }
}

我实际上添加了 else-if 只是为了安全,但它也无法使用简单的 else 语句。

我正在使用 p5.js 库,如果能深入了解这里发生的事情,我们将不胜感激。谢谢!

经过一些测试发现了错误。我正在遍历同一网格单元上的所有障碍(即测试障碍 [0] 用于网格 [2][2],测试障碍 [1] 用于网格 [2][2])。这意味着如果数组中的第一个障碍被证明是正确的,但其他障碍被证明是错误的,则整个 grid[2][2].obstacle 将变为错误。或者直观地映射它:

grid[2][1] ...
grid[2][2].obstacle = true!
grid[2][2].obstacle = false.
grid[2][2].obstacle = false.
grid[2][3] ...

输出:

grid[2][2].obstacle is false :(