3

我目前正在使用 Perlin Noise 开发 2d 世界生成器(侧卷轴),我希望能够让稀有矿石散布在地形中 - 但我不完全确定如何去做。

我正在考虑做的是,在循环二维数组并生成世界时,收集所有数字(或数字范围)的列表并将它们添加到数组中 - 然后确定每个数字/数字范围的稀有性,然而,像这样放置矿石......

这似乎很慢,必须更快、更好的方法。在那儿?

编辑:表达我的问题的另一种方式是,Minecraft 究竟是如何放置矿石的,以及在 2d(从侧面)游戏中使用 Perlin 噪声的最佳方法是什么。

4

3 回答 3

3

您可以根据随机概率放置块。但是,由于数量稀少,这意味着大片区域将没有块状物,而其他一些地方的稀有矿石相对丰富。更好的算法可能是:建立一个基础区域,确定一个可接受的密度(例如:每个区域从一到三个稀有块),然后计算每个区域稀有块的随机位置。

一个例子:您确定在每 1000x1000 区域内有 1-3 个稀有肿块是可以接受的。然后,对于这些区域中的每一个,您计算稀有块的数量为1+floor(random*3)(where 0<random<1),并计算生成的稀有块的随机坐标。例如,您还可以将约束添加为稀有块之间的最小距离,这对于随机噪声生成器是不可能的:如果一个稀有块放置得太靠近另一个稀有块,只需重新计算其位置。

于 2012-09-13T18:56:25.697 回答
1

正如 Notch 在这篇博文中所述,Minecraft 用于生成地形的确切公式是一个秘密。

我认为在 2d Minecraft-ish 游戏中做到这一点的最佳方法是逐块生成世界,并带有 perlin 噪声(看看这个教程)。然后在创建每个块时,将 X 和 Y 发送到另一个函数,该函数将计算块中存在矿石的可能性,如果存在,它将是什么矿石。如果该函数返回一个矿石,那么您可以将该块重新创建为该矿石。

希望这有帮助。如果您想要更具体的编码示例,请告诉我!

于 2012-09-08T18:56:33.950 回答
1

我相信 Minecraft 的地形是基于 Perlin 噪声生成的几个八度音阶,然后通过拉伸使其平滑。我假设某些特征会在进一步的通道中添加,例如洞穴、悬垂等。您很可能必须尝试使用​​ Perlin 或其他噪声函数才能为您的景观提供令人愉悦的输出。这种噪声函数的好处是,对于给定的种子,它们将为一组输入提供可预测的、可重复的输出,即您可以像 Minecraft 那样以块的形式生成景观,而不会出现任何不连续性。这里还有更多:https ://gamedev.stackexchange.com/questions/28970/c-perlin-noise-generating-endless-terrain-chunks

在矿石生成方面,以随机加权分布分布的单个矿石块不会给您带来非常愉快的输出。您很可能更喜欢以看起来自然的块状生产矿石。您可以通过再次使用 Perlin 来生成局部口袋或垂直拉伸的可开采材料脉来做到这一点。您可以按原样使用该功能并将您的景观高度图用作截止点(这样您就不会在半空中得到矿石!),或者您可以输入您的一维景观生成功能作为另一个输入,这意味着您可以生产其分布针对不同深度进行缩放的矿石。至于矿石的稀有度,您可以使用与 2D 噪声输出不同的截止值进行放置,还可以试验频率和持久性输入值。

我喜欢这里给出的洞穴生成函数:http ://www.gamedev.net/blog/33/entry-2227887-more-on-minecraft-type-world-gen/ 脊形多重分形当然可以适应生成矿石模式或其他地下特征,但如果采用这种方法,则会增加复杂性。

编辑:

第一个链接可能是您自己在 gamedev 上发布的问题!你是同一个乔恩吗?:)

于 2012-09-08T20:47:45.007 回答