然而,这种方法限制了游戏的关卡设计,我更希望有一个无限的瓷砖地形。
作为一个初学者,我查找了不同的方法。其中一个特别重要的方法是被称为Perlin噪声。
我研究了它,但它看起来非常复杂。
是否有人可以用更简单的术语定义它?
另外,如果您有任何“降低智商”的教程,以提供简要概述,那就太棒了!
抱歉我没有太明确,实际上我正在避免这样做。
我建议跳过Perlin Noise,看一看叫做OpenSimplex Noise的东西。
它对于基本上所有与Perlin Noise相同的事情都很有用,但是它具有显着较少的可见方向伪影。 基本上,噪声会获取一个输入坐标(在2D、3D或4D中),并返回-1到1之间的值。 输出值随着输入坐标变化而连续变化。
以下是使用噪音生成的三个256x256图像(x / 24.0,y / 24.0):
请注意,还有称为Simplex Noise的算法(与OpenSimplex不同)可以减少与Perlin Noise相比的方向伪影,但是Simplex Noise的3D及更高版本实现(如果您恰好想要使用3D噪声在2D上随着时间变化而改变任何东西)则带有专利。
OpenSimplex Noise实际上是我为自己的游戏开发的算法,所以我很无耻地宣传一下,但我认为这是您可以使用的最好算法。
Daniel Shiffman在《代码本质》一书中精彩介绍了Perlin噪声。该在线书籍提供了很棒的Javascript/ProcessingJS示例代码,以演示一些重要概念:
一个好的随机数生成器产生的数字之间没有关系且没有可辨识别的模式。正如我们开始看到的,当编程有机、栩栩如生的行为时,略微的随机性是一件好事。然而,仅依赖随机性并不一定是自然的。由发明人Ken Perlin开发的算法 “Perlin噪声” 将这个概念考虑在内。Perlin在1980年代早期工作于原版Tron电影时开发了噪声函数;它被设计来为计算机生成的效果创建程序纹理。1997年,Perlin因此获得了技术成就奖学院奖项。Perlin噪声可用于生成具有自然特质的各种效果,比如云、景观和大理石样式等。
Perlin噪声具有更有机的外观,因为它生成自然排序(“平滑”)的伪随机数序列。下面左侧的图表显示随时间变化的Perlin噪声,其中x轴表示时间;请注意曲线的平滑性。右侧的图表显示随时间变化的纯随机数。
(生成这些图表的代码可在附带的书籍下载中找到。)
Khan Academy 专门为 高级 JavaScript 课程致力于剖析 Shiffman 在他的书中展示的一些东西。他们有很好的随机性教学,当然,还有一个专门针对Perlin 噪声的课程。
您不必立即完全理解perlin或simplex实现。您可以在玩弄各种方法的参数时慢慢学习。只需使用它,通过将x、y、可能是z或更多维度参数与网格坐标一起输入即可。为了保持简单,您基本上需要混合/叠加不同比例的插值随机图像的几个层(八度)。
由于运行时可能会产生处理费用(尽管取决于分辨率/八度和处理预算或测试目的,您也可以实现相当不错的实时帧速率),因此您可能还想离线评估和存储噪声。