我一直在用 JavaScript 开发 Canvas 游戏。
我选择创建不受世界大小网格限制的游戏。因此,如果他们希望使用大小为 N 的网格进行游戏,则逻辑会生成它。
我一直在研究边界检测,并开始编写一个函数,如果用户决定移动到屏幕外,该函数将更改网格上的单元格位置。
为简单起见,我将网格大小缩小到 N = 9,以便您可以直观地看到这一点。网格看起来像
[0][1][2]
[3][4][5]
[6][7][8]
如果用户要离开 -x 值单元格 [0],他们将出现在单元格 [2] 的最右边的 x 位置。这表示为 SQRT(N)。所以我知道最右边的角是 SQRT(N)。我还知道 N 是右下角的单元格 [8]。
话虽如此,这里是单元格及其方程式 ID 的示例。
[0][1][SQRT(N)]
[3][4][5]
[N - SQRT(N)][7][N]
上面的网格显示了 4 个角的 x 轴公式,但在使用静态魔数(Magic Number) switch-case 条件之前,我至少尝试回答内部单元格方程式是很重要的。
这里是一些 javscript 代码,展示了我正在解释的内容:
if (player.X < 0 - 10) {
player.X = SCREEN_WIDTH;
if (gameQuadrent == 0) {
gameQuadrent = Math.floor(Math.sqrt(WORLD_SIZE));
} else if (gameQuadrent == (WORLD_SIZE - Math.floor(Math.sqrt(WORLD_SIZE)))) {
gameQuadrent = WORLD_SIZE;
} else {
gameQuadrent--;
}
}
有什么更有效的方法吗?我正在尝试解决这个问题,而不必转移到固定的世界大小。
非常感谢。
最佳答案
如果 Quadrent 的数字是 SQRT(WORLD_SIZE) 的倍数,则它位于世界的左边界。因此,以下代码应相应地更新 gameQuadrent。
int side = Math.floor(Math.sqrt(WORLD_SIZE));
if (gameQuadrent % side) == 0) {
gameQuadrent += side - 1;
}
else {
--gameQuadrant;
}
关于algorithm - 在不声明 2 个变量(行和列)的情况下遍历 N 个单元格的网格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8586247/