SKTileMapNode:创建一个无限大小的平铺图

时间:2017-11-08 10:49:07

标签: ios swift sprite-kit sktilemapnode

Apple Documents它上面你可以创建一个无限大小的SKTileMap

  

生成类似于自然地形的程序性游戏世界地图。您可以使用程序噪声作为其底层表示来创建无限大小的游戏世界,并通过仅为玩家当前位置周围的区域创建噪声贴图(及其视觉表示)来有效管理存储和内存。 (参见SKTileMap类。)

我可以使用GKNoise生成逼真的地形,就像Apple Documents声明一样。image 1

然而,我不能制作一个巨大的无限大小的SKTileMapNode来强制在设备上运行

苹果文件表示只围绕玩家当前位置制作SKTileMapNode(比如我的世界中的块)

我怎样才能在swift中实现这一目标?我的RPG需要无限大小才能实现我想用这个游戏做的一切。

我需要" chunks"是SKTileMapNodes,因为我需要将树木,石头,水等添加到地图中,以便玩家可以与之互动。

1 个答案:

答案 0 :(得分:0)

解决问题的方法开始于使GKNoise可以平铺。 您可能正在使用 GKNoiseMap 生成它们。 使用初始化程序时:

let map = GKNoiseMap(_ noise: GKNoise, size: vector_double2,  
origin: vector_double2, sampleCount: vector_int2, seamless: Bool)
  

重要:请不要忘记将“无缝”变量设置为 true

这样,您将获得一个可平铺的地图。 使它们大于屏幕时,效果会更好。

让我们说,作为您的现实地形的地图部分(可平铺)将变为2048 x 2048

例如,一张地图可以覆盖128x128个图块。在这种情况下,每个 SKTile 将为16x16像素

您制作一个具有128x128切片的 SKTileMap

现在 SKTileMap 需要背景图片或图块定义(在这种情况下,就是您生成的 GKNoiseMap

现在,您可以只使用相同的 GKNoiseMap 地图,并在任意方向上将其放置在第一个地图旁边,其中包含另一个128x128瓦片的瓦片地图。

您的地图现在为256x128瓦片。当用户滚动时,他们无法分辨出一幅图像在哪里结束而另一幅图像在哪里开始,因此通过重复相同的操作,地图的 整个 大小可以根据需要而变大锻炼。

当您生成比屏幕大的 GKNoiseMap 时,当下一个 GKNoiseMap 开始之前必须滚动几次时,它会很好地工作。这样,它就不会在视觉上重复。

“玩家位置”周围的区域可以是一张地图,然后在滚动时,地图可以重复自身,从而避免了加载已生成的地图之外的任何内容。这就回答了问题的“ 并通过创建噪声图有效地管理存储和内存”。

您还应该注意数据存储。如果每个 SKTile 需要存储的变量与 GKNoiseMap 提供的变量不同,则无限映射可能会非常昂贵。