在iphone或Java上实现像Scorched Earth Game这样的地形破坏

Dou*_*kem 3 java opengl iphone

我正在寻找一个如何实现2D地形破坏的例子,你可以在烧焦的地球或iphone iShoot等游戏中看到.

我正在寻求实现一个需要做可破坏地形的游戏,并使用OpenGL(Java中的LWJGL)和在iPhone上使用OpenGL ES来渲染它.

alt text http://www.vintagecomputing.com/wp-content/images/shareware/scorch_3_large.png

Sov*_*iut 7

我记得,在沃尔姆斯他们使用了两张图片; 带有颜色的"漂亮"地形,以及纯黑色和白色的面具地形.命中检测始终在掩码上完成.

如果你真的希望地形像坦克大战一样崩溃,你需要迭代你的图像的每一列,并让它搜索地形和比赛场地底部之间的间隙.如果检测到任何间隙,请将间隙上方的地形向下移动到列中可能的最低点.

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

[1,1,1,1,1,1,0,0,0,0]
Run Code Online (Sandbox Code Playgroud)

让我们假设地形从侧面被击中并形成一个洞:

[1,1,0,0,1,1,0,0,0,0]
Run Code Online (Sandbox Code Playgroud)

你现在留下了另一块地形上方的浮动地形.要使浮动地形折叠,请遍历数组,跟踪找到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]
Run Code Online (Sandbox Code Playgroud)

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

编辑:

正如第一条评论所述,列表上的排序更容易.我保持原始的响应完整,因为它有助于解释崩溃地形背后的实际原理.