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

时间:2010-01-18 01:16:59

标签: c# xna terrain

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

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

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

4 个答案:

答案 0 :(得分:34)

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

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

答案 1 :(得分:7)

Riemer对他在XNA开发的游戏采用了类似的方法,炮弹导致地形“被破坏”,之前在所述地形上的任何道具都会相应移动。

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

Riemer也有很多其他方面的教程选择。

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

答案 2 :(得分:4)

有两个可能,一个工作,但它取决于XNA实施的容易程度:

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

答案 3 :(得分:1)

以下两个示例相互构建了如何使用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上完成。