正确“随机”生成流动地形的方法


9

我正在创建一个简单的自上而下的RTS游戏。我计划在需要时“随机地”即时生成地图。我计划所有这些都以“通过”的方式工作:

  1. 全草填满地形
  2. 返回并添加一些随机的砾石
  3. 磨碎碎石
  4. 在第二层上绘制山地景观
  5. 圆山
  6. 等等等

现在,请看下面的图片:

在此处输入图片说明

我是使用地图编辑器手动创建的,但我希望将其传递给第3步后,我基本上打算将其作为结果。

我应该如何确定何时以及将砾石放置的位置,使其至少具有不规则的形状和零星的外观,看起来自然呢?

谢谢,如果可以!任何和所有帮助表示赞赏!

附带说明:

基本上,每次通过都是遍历我所有的图块(该地图分为40x40图块),类似于以下内容:

for (int x = 0; x <= GRIDMAX - 1; x++) {
    for (int y = 0; y <= GRIDMAX - 1; y++) {
        //Terrain(x, y, 0) = SomethingHere;
    }
}

Answers:


5

您可以使用Perlin Noise(有关实现请参阅我的StackOverflow答案)来生成高度图。从高度图,可以将某些高度范围映射到不同的图块。就像是:

  • 前20%的雪
  • 接下来的20%碎石
  • 接下来的40%草
  • 最后20%的水

您将必须使用Perlin Noise生成器值来获得可以生成的地形并看起来不错。


5

正如其他人所说的那样,Perlin噪声应该是决定放置不同类型瓷砖的位置的良好数据来源。我想补充一下这个想法,并链接两个对清单中的第三步有用的资源- 圆角

这是一个称为自动平铺的过程,实现起来并不难。有许多不同的方法可以执行此操作,但是大多数方法都依赖于为每个图块计算邻接信息,以便确定应在该位置绘制哪个图形。

解决此问题的一种非常优雅的方法是为每个相邻的图块方向分配一个唯一的标志值,并布局Spritehseet,以使通过将图块的所有相邻标志加在一起而获得的值将对应于该图块的正确位置。 Spritesheet中的图块。阅读本文以获得对该技术的非常清晰的描述。

这里的另一种资源,它描述了技术的另一种变体。


嘿,只是想让您知道,您的回答对解决问题非常有帮助。感谢一吨:)实际上,现在所有内容都可以使用(甚至包括圆角)!
Freesnöw

4

本质上,您可以使用Perlin Noise生成来生成地图。您将对生成的高度图进行采样,并将碎石块分配给高度超过一定高度的部分。

这是一篇出色的参考文章,介绍了如何实施这样的系统以及可能生成的不同类型的地形。

这些示例比您需要的步骤多得多,但是概念是相同的。

有关《我的世界》世界发电机的更多信息

http://www.gamedev.net/blog/33/entry-2227887-more-on-minecraft-type-world-gen/

在此处输入图片说明

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.