在Swift中使用Perlin噪波编写程序生成的2D地形的早期尝试

当玩家在环境中移动时,我提到的第二个游戏会创建更小的世界“块”。 在继续探索的过程中,创建城市和建筑物,道路和森林,危险废物石棺和未来派废弃的实验室。

实现空间中不同元素的这种“现实”分布的一种方法是应用称为Perlin Noise的函数。 噪声函数可以描述为以下函数:

[…]在某些空间中获取一个坐标并将其映射为-1和1之间的实数。请注意,您可以为任意维创建噪声函数。 […]您可以绘制一维噪声函数的图形,就像绘制一个变量的任何旧函数一样,也可以考虑噪声函数为3D空间中的每个点返回实数。

如果您想知道,那摘录来自本文,我发现它是许多程序员在此问题上的首选参考文章。 请记住,如果您仅打算将其用于游戏编程实验,则不建议您进一步研究Perlin Noise背后的数学理论。

考虑到这一点,我可以继续进行自己的Swift实验。 它很大程度上是基于简单,逐步但在互联网上发现的效率低下的Perlin Noise伪代码。 我不仅知道第二个Swift例子(紧跟着这个例子)。 但这是我知道的唯一一个Swift例子,它没有渲染到图像中的像素。 实际上,这是一种使用(2D)噪波函数的不同值将元素按网格模式放置在屏幕上的功能。 并使用某些游戏将它们匹配到不同对象的方式,以加载不同的精灵:

首先,我尝试生成一个位图图像,该位图图像带有一个与2D数组中每个浮点数相对应的灰度彩色像素,我使该数组与屏幕大小相同,并以从0到1的灰度将每个像素着色:

在实际程序中使用由噪声函数生成的伪随机数数组非常简单,只需将每个数字分配给一个对象,在这种情况下就是Element类的对象。 并且每个对象到屏幕的方形部分。 并将每个数字映射到例如颜色。 我使用一个效率极低的switch语句只是为了好玩:

可以很容易地想象出一个游戏角色在地形上行走的过程,就像在矮人要塞图像中用树形精灵所做的那样。

在右图中,您可以看到一堆靠近沙子(黄色)的水(蓝色),在左图中,您可以看到屏幕下部的一簇树(红色),而在屏幕下部则可以看到更多的水和沙子。上面的部分。 绿色的东西是草。 您可以通过点击靠近边缘的屏幕来导航地图。 彩色的正方形是sprite节点,可以向它们加载小的正方形图像或sprite,但这只会增加示例的开销,因此我将其保留为原样,仅使用不同的背景色。

我想我只是想出了为什么不存在能够生成深层游戏内容的移动类盗贼的原因。 有太多的开销。 有充分的理由说明,像我提到的类似roguelike的游戏是一些资源最密集的应用程序:它们实现了寻路和流畅的行为机制,并且每当发生某种事情时就会运行各种繁重的CPU负载。

希望这将导致在流氓类型上,尤其是在Swift方面取得更多的发展。 因为这是我在横向视图中作为iOS开发人员的主要工作工具。