我目前正在使用Perlin噪音的2d世界发电机(侧滚轮)上工作,我想让稀有矿石在地形中扩散--但我不完全确定该如何做。
我想做的是,在循环遍历2d数组并生成世界时,收集所有数字(或数字范围)的列表,并将它们添加到数组中,然后确定每个数字/范围的稀缺性,然后放置类似的矿石.
这似乎很慢,必须有一个更快、更好的方法。在那里吗?
编辑:我的问题的另一种说法是,“我的世界”如何准确地放置矿石,以及在使用Perlin噪音的2d (从侧面)游戏中实现这一目的的最佳方法是什么。
发布于 2012-09-13 18:56:25
你可以根据随机概率来放置这些块。然而,以罕见的数字,这将意味着大面积将没有肿块,而其他一些地方将是相对丰富的稀有矿石。一个更好的算法可能是:建立一个基区,确定一个可接受的密度(例如:每个区域从一个到三个稀有块),然后计算每个区域的稀有块的随机位置。
一个例子:您确定在每1000x1000个区域有1-3个罕见的块是可以接受的。然后,对于这些区域中的每一个,以1+floor(random*3) (其中0<random<1)的形式计算稀有块的数量,并计算产生的稀有块的随机坐标。例如,您还可以添加约束作为稀有块之间的最小距离,这在随机噪声发生器中是不可能的:如果一个稀有块放置得太近,那么只需重新计算它的位置。
发布于 2012-09-08 18:56:33
“我的世界”用于生成地形的精确公式是一个秘密,正如Notch在这博客文章中所述。
我认为在一个2d“我的世界”游戏中这样做的最好方法是逐块生成世界,带着perlin噪音(看看这教程)。然后,当每个块被创建时,将X和Y发送到另一个函数,该函数将计算出块中存在矿石的可能性,如果是的话,它将是什么矿石。如果函数返回一个矿石,那么您可以重新创建块作为该矿石。
希望这能帮上忙。如果你想要更具体的,编码的例子,就让我知道!
发布于 2012-09-08 20:47:45
我相信,“我的世界”的地形是基于几个八度的珀林噪声产生,然后通过拉伸平滑。我假设在进一步的通道中添加了某些特性,如洞穴、悬垂等。很有可能,您将不得不试验Perlin或其他噪音功能,以便为您的景观提供一个令人愉快的输出。这些噪声函数的好处是,通过给定的种子,它们将为一组输入提供可预测的、可重复的输出,也就是说,您可以像“我的世界”那样,在没有任何间断的情况下,以块的形式生成您的景观。这里还有更多信息: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上发布的一个问题!你是同一个乔恩吗?:)
https://stackoverflow.com/questions/12275170
复制相似问题