ios - SKTileMapNode:创建无限大小的瓦片 map

标签 ios swift sprite-kit sktilemapnode

Apple Documents 上它声称你可以制作一个无限大小的 SKTileMap

Generating procedural game-world maps resembling natural terrain. You can create game world of infinite size by using procedural noise as its underlying representation, and manage storage and memory efficiently by creating noise maps (and their visual representations) only for the area around a player’s current position. (See the SKTileMap class.)

我可以像 Apple Documents 这样用 GKNoise 生成逼真的地形。声称你可以。 image 1

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

Apple 文档说只在玩家当前位置周围制作一个 SKTileMapNode(就像 minecraft 中的 block )

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

我需要“ block ”是 SKTileMapNodes,因为我需要将树、石头、水等添加到 map 中,以便玩家可以与之交互。

最佳答案

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

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

Important: Don't forget to set the "seamless" variable to true.

这样你就可以得到一张可拼贴的 map 。 使它们比屏幕大时看起来更好。

假设您的真实地形 map 的一部分(可平铺)到 2048 年将变成 2048 年

例如,一张 map 可能覆盖 128x128 的图 block 。在这种情况下,每个 SKTile 都是 16x16 像素

你用 128x128 的图 block 制作了一个 SKTileMap

现在 SKTileMap 需要一个背景图像,或者 tile 定义(在本例中,它是您生成的 GKNoiseMap)

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

您的 map 现在是 256x128 的图 block 。当用户滚动时,他们无法分辨一张图片的结束位置和另一张图片的开始位置,因此 map 的整体大小可以随心所欲地变大,方法是重复相同的操作运动。

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

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

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

关于ios - SKTileMapNode:创建无限大小的瓦片 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47177723/

相关文章:

ios - 在swift中确定数组是否包含另一个数组的一个或多个元素

sprite-kit - Swift 2 迁移错误 : no longer can pass in nil in the designated initialiser of SKSpriteNode

ios - 我忘记了 APNs 证书,现在怎么办? (推送通知不起作用)

ios - 如何在MVVM iOS中初始化ViewModel属性

ios - Jenkins iOS 构建错误 : no such module 'XXX'

ios - 尝试使用 BGAppRefreshTask 并收到错误 No task request with identifier <decode : missing data> has been scheduled

ios - 如何强制重新安装iOS模拟器?

swift - 从 UICollectionView cellForItemAt indexPath 为 CAShapeLayer 动画设置 toValue

ios - 缩放 SpriteKit 游戏

ios - ScrollView 停在某个点