基于图块的2D Platformer的地形生成


15

我目前在某种程度上正在开发类似于Terraria的基于图块的2D平台游戏,尽管我在地形生成方面遇到了困难。我完成了一些基础工作,尽管它们没有任何有用的作用。

我尝试了几种不同的技术,例如Perlin Noise,并了解了其他一些技术,例如Midpoint Displacement,尽管我不确定哪种方法最好,或者无法结合使用不同的技术来生成不同的区域。(例如中点位移表示地形的一般形状,Perlin Noise表示洞穴的形状。)

我已经找到了一个很好的解释说明如何使用“ 意外噪声库”将其分层,尽管它是C ++语言,而且我不了解足够的C ++语言将其编译成可从C#中使用的DLL。尽管我不知道如何将两个效果(通用基的渐变,然后是详细的分形)合并在一起,但我尝试用C#复制它。

目前,我正在使用等离子分形,结果差异很大。例如,它可以生成几乎没有任何表面的地形,也可以生成根本没有任何表面的地形。

好的地图的示例会有所改进,但会更好。(黑色为实心,白色为空):

好的地图

还有一个可怕的地图的例子。(黑色为实心,白色为空):

糟糕的地图

基本上,我要问的是,什么是生成地形的更好方法,或者强迫它确保有合理的表面积,并且尽快生成。或者,或者,如何使用C#实现与“意外噪声库”相同的结果。

任何例子将不胜感激。


嗨,我想知道你是怎么做到的。我试图了解如何生成这样的世界,我喜欢您得到的结果。您使用的是哪种算法,因为它看起来不像Perlin噪声2D,而且绝对不是Perlin噪声1D。
G3tinmybelly 2014年

Answers:


8

我会尝试坚持使用Perlin噪声,但是要根据高度增加权重,以确保在某些高度上具有一定的平均密度。引用Notch 关于Minecraft地形生成帖子的一部分:

因此,我将系统切换到基于3D Perlin噪声的类似系统。我没有对“地面高度”进行采样,而是将噪声值视为“密度”,其中低于0的任何东西都是空气,高于0的任何东西都是地面。为了确保底层是固体而顶层不是固体,我只将高度(由水位偏移)加到采样结果中。

本质上,您只需要在Minecraft地形中占一小部分。因此,请生成2D Perlin噪声,但要对其进行加权,以使高于某个点的任何物体都可能是空气,而低于某个点的任何物体都可能是地球。

这将为您提供良好的地面地形,并具有一些悬垂和有趣的特征,以及一些洞穴和浮岛。(如果您不希望使用浮岛,则可以对其进行测试并手动将其删除。)该方法不会给您带来隧道之类的东西,因此,您需要一种在地形生成后将其添加到其中的方法,例如随机游走


不能完全确定我是否正在充分利用Perlin Noise。在完全按照您的描述进行操作之后,它只是开了很多山洞,有很多浮岛。没有实际的地形类型定义。使用渐变权衡结果,我得到了这个结果
阴影尺寸

@Shaded Dimensions-您需要调整Perlin Noise参数。当您想要的是更平滑,更宽广的图案时,您的杂音变化非常大。查看freespace.virgin.net/hugo.elias/models/m_perlin.htm并尝试弄乱您的参数。尝试降低持久性并减少八度。(这些术语可能有所不同,因此请阅读该文章。)
dlras2 2011年

好的,谢谢您的链接。我还发现,更改一些参数后,砝码无法正常工作。
阴影尺寸

好的,修改了很多参数,至少到目前为止,我得到了一些可以接受的东西。我还删除了仅用于此测试的生成洞穴,因为我想先完成实际地形。这是最终结果。只需添加检查即可删除这些浮动岛。再次感谢。
阴影尺寸

@Shaded Dimensions-太好了!很多时候,仅通过调整参数和叠加噪声即可获得良好的地形。您需要花一些时间才能获得满意的东西,但是您始终可以使用现在拥有的东西,然后回来添加完成调整。祝好运!
dlras2 2011年
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.