【发布时间】: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 中执行相同的操作。那条线上
i、j和grid[i][j]的值是多少?o和obstacles[o]的值是多少?您必须缩小问题范围,然后尽可能使用硬编码值发布minimal reproducible example。祝你好运。 -
谢谢凯文,我在开发人员控制台中硬编码了 if 语句的值,但无济于事。最终我回到控制台。记录所有正在读取的值。这让我意识到,如果障碍 [0] 证明网格 [2] [2] 为真,但障碍 [1] 证明网格 [2] [2] 为假,这将导致网格 [2][2]。障碍是假的。我仍然不确定为什么控制台中的硬编码不起作用,但幸运的是我找到了答案!
标签: javascript if-statement p5.js