3

Apple Documents上,它声称您可以制作无限大小的 SKTileMap

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

我可以使用 GKNoise 生成逼真的地形,就像Apple Documents声称的那样。图 1

但是,我不能制作 1 个巨大的无限大小的 SKTileMapNode 在设备上运行会很紧张

苹果文档说只在玩家当前位置周围制作一个 SKTileMapNode (就像我的世界中的块)

我怎样才能迅速做到这一点?我的 RPG 需要无限大,才能实现我想用这个游戏做的一切。

我需要将“块”作为 SKTileMapNodes,因为我需要将树木、石头、水等添加到地图中,以便玩家可以与之交互。

4

1 回答 1

0

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

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

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

这样你就得到了一个可平铺的地图。当你把它们做得比屏幕大时,它看起来会更好。

假设地图的一部分(可平铺)是您的真实地形,到 2048 年将变为 2048

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

你用 128x128 瓦片制作了一个SKTileMap 。

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

现在您可以使用相同的GKNoiseMap贴图,并放置在第一张贴图旁边,在任何方向上,包含另一个 128x128 贴图的贴图。

您的地图现在是 256x128 瓦片。当用户滚动时,他们无法分辨出一幅图像在哪里结束而另一幅图像从哪里开始,因此通过重复相同的练习,地图的整个大小可以随心所欲地变大。

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

“玩家位置”周围的区域可以是一张地图,然后当你滚动时,地图可以重复自己,让你无需加载除了已经生成的地图之外的任何其他内容。这回答了您问题的“并通过创建噪声图有效地管理存储和内存”部分。

您还应该小心数据存储。如果每个SKTile需要存储的变量与GKNoiseMap所提供的不同,无限地图可能会很昂贵。

于 2019-01-29T00:57:23.697 回答