我正在寻找一个示例,说明如何实现 2D 地形破坏,您在 scorched earth 或 iphone iShoot 等游戏中会看到这种情况。

我希望实现一个需要制作可破坏地形并使用 OpenGL(Java 中的 LWJGL)和在 iPhone 上使用 OpenGL ES 渲染它的游戏。

java - 在 iphone 或 Java 上实现像 Scorched Earth Game 这样的地形破坏-LMLPHP
(来源: vintagecomputing.com )

最佳答案

我记得,在蠕虫中,他们使用了两个图像;带有颜色的“漂亮”地形,以及纯黑白的蒙版地形。命中检测总是在掩码上完成。

如果您真的希望地形像在《坦克大战》中那样折叠,您需要遍历图像的每一列,并让它搜索地形和比赛 field 底部之间的间隙。如果检测到任何间隙,请将间隙上方的地形向下移动到列中可能的最低点。

一个简单的例子可以用一个数组来完成,其中 1 代表固体地形,0 代表空白空间。在这种情况下,我将数组的左侧设置为地面,元素 [0] 将在地面上:

[1,1,1,1,1,1,0,0,0,0]

让我们假设地形是从侧面撞击的并打了一个洞:
[1,1,0,0,1,1,0,0,0,0]

现在,您在另一块地形上方留下了一块 float 地形。要使 float 地形塌陷,请遍历数组,跟踪找到 0(空白空间)的第一个位置。然后,当您继续迭代时,发现 1(地形)后,只需将 1 移至 0 所在的位置即可。通过从旧的 0 位置 + 1 迭代来重复该过程。
[1,1,1,0,0,1,0,0,0,0]

[1,1,1,1,0,0,0,0,0,0]

这是基本方法,而不是最有效的方法。例如,同时向下移动间隙上方的所有地形索引会快得多。

编辑:

正如第一条评论所述,对列表进行排序更容易。我保持我的原始响应完好无损,因为它有助于解释坍塌地形背后的实际原理。

关于java - 在 iphone 或 Java 上实现像 Scorched Earth Game 这样的地形破坏,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/843718/

10-12 14:43