【问题标题】:JavaScript If-Statement Proved True But Outputs FalseJavaScript If 语句被证明为真,但输出为假
【发布时间】:2018-02-27 09:42:08
【问题描述】:

我正在通过编写我的第一个游戏(一个简单的激光镜型游戏)来学习 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 库,如果能深入了解这里发生的事情,我将不胜感激。谢谢!

【问题讨论】:

  • 当我用研磨系统编写这样的游戏时,我遇到了同样的问题。我通过尝试将 1 添加到索引/删除一个来解决它。不要错过从 0 开始的索引 :)
  • 如果在您的 if-else 语句中,1 个条件为真而 1 个为假怎么办?那会发生什么?
  • 您提供给我们的信息很难帮助您。请问debug your code好吗?该链接用于处理,但您可以使用 developer tools 在 P5.js 中执行相同的操作。那条线上ijgrid[i][j] 的值是多少? oobstacles[o] 的值是多少?您必须缩小问题范围,然后尽可能使用硬编码值发布minimal reproducible example。祝你好运。
  • 谢谢凯文,我在开发人员控制台中硬编码了 if 语句的值,但无济于事。最终我回到控制台。记录所有正在读取的值。这让我意识到,如果障碍 [0] 证明网格 [2] [2] 为真,但障碍 [1] 证明网格 [2] [2] 为假,这将导致网格 [2][2]。障碍是假的。我仍然不确定为什么控制台中的硬编码不起作用,但幸运的是我找到了答案!

标签: javascript if-statement p5.js


【解决方案1】:

经过一些测试发现了这个错误。我正在遍历同一网格单元格上的所有障碍物(即网格 [2] [2] 的测试障碍 [0],网格 [2] [2] 的测试障碍 [1])。这意味着如果数组中的第一个障碍物被证明为真,而其他障碍物被证明为假,则整个 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 :(

【讨论】:

    猜你喜欢
    • 2014-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-19
    • 1970-01-01
    • 2013-09-05
    • 2014-10-21
    • 1970-01-01
    相关资源
    最近更新 更多