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 :(
我正在通过编写我的第一个游戏(一个简单的激光镜式游戏)来学习 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 :(