如何在XNA中实现蠕虫风格的可破坏地形?

我想为我的游戏制作一个想法的原型。 这个游戏的想法是玩家将挖掘地面,创建隧道和寻找宝藏。

我正在寻找创造’蠕虫风格’的地形,通过碰撞检测让玩家在隧道中游荡和跳跃。 在这些图片中可以看到这种类型的动态地形的例子。 示例1 http://img301.imageshack.us/img301/1675/30184730wd6.png 例2

我的问题是如何实现这种类型的可破坏地形的最佳方法? 我正在使用XNA游戏工作室。

在这个post的底部有一些很好的代码。 此外, 这是一个关于实现可破坏地形的一个很好的分步教程。

编辑 – 第二个教程的原始链接已被破坏,因此我已链接到它的存档版本。

Riemer对他在XNA中开发的游戏采用了类似的方法,炮弹使得地形被“摧毁”,并且之前在所述地形上的任何道具都相应地移动。

它需要根据您的需求进行重构和改进,但这是一个开始。

Riemer也有其他一些很好的教程选择。

http://www.riemers.net/eng/Tutorials/XNA/Csharp/Series2D/Adding_craters.php

有两个可能,一个工作,但它取决于XNA实现是多么容易:

  • 像其他人建议的那样,位图屏蔽。 您保留所有“地面”像素和所有“空气”像素的位图。 如果你有引力; 一个角色不能通过地面坠落,而它可以通过空气坠落。
  • 矢量几何。 你从一个长方形的“地面”开始,并拿着一个“移除”的地面列表,这会产生空气。 这种几何图形编辑非常简单:只需在列表中添加一个圆圈或类似物,然后更新图形。 我不知道XNA是否具有矢量和形状能力; 但应该很容易用这两件事创建几何体,然后应用纹理或类似物。 此外,通过保持渲染的景观的缓存版本,并且仅更新新添加的“空气”的边界框的缓存,可以容易地优化。 这个解决方案需要更多的数学运算。

以下是两个示例,它们相互构建了如何使用XNA 4中的像素着色器执行此操作。两个示例都包含sourecode。

http://www.syntaxwarriors.com/2012/xna-alpha-mapping-with-pixel-shaders/

http://www.syntaxwarriors.com/2012/xna-alpha-mapping-with-pixel-shader-and-rendertarget2d/

使用像素着色器执行此操作非常快,因为所有繁重的操作都是在gpu上完成的。