【问题标题】:Procedural Map Generation - SpriteKit and GameplayKit程序地图生成 - SpriteKit 和 GameplayKit
【发布时间】:2016-07-15 12:35:31
【问题描述】:

我有以下代码使用新的GameplayKitGKNoise 生成噪音。我不确定如何将它与SKTileMapNode 一起使用。有没有人试过这个?目前,噪声应用于每个图块,但不应用于整体TileMap。有没有办法将生成的噪声用于整个地图?

let noise: GKNoise = GKNoise(noiseSource: GKPerlinNoiseSource())
let noiseMap: GKNoiseMap = GKNoiseMap(noise: noise)
let texture: SKTexture = SKTexture(noiseMap: noiseMap)

let tileDef = SKTileDefinition(texture: texture)
let tileGroup = SKTileGroup(tileDefinition: tileDef)
let tileSet = SKTileSet(tileGroups: [tileGroup])

// Create a tile map
let tileSize = CGSize(width: 32.0, height: 32.0)
let tileMap = SKTileMapNode(tileSet: tileSet, columns: 16, rows: 16, tileSize: tileSize)

// Fill the entire map with a tile group
tileMap.fill(with: tileGroup)

self.addChild(tileMap)

【问题讨论】:

  • 你到底想做什么?
  • @Mr_Pouet 我正在尝试生成地形。 tileSet 有一组可供选择的图块,我期待噪声函数为我生成图块图案。

标签: ios swift sprite-kit procedural-generation gameplay-kit


【解决方案1】:

GKNoise 返回 [-1.0,1.0] 范围内的噪声。

您需要以某种有意义的方式将其映射到您的游戏中。一个简单的例子是说 [-1.0,0.0] 之间的一切都是水,而 (0.0,1.0] 之间的一切都是土地。

一旦您决定了这个映射是什么,只需在 GKNoiseMap 上使用 getValue() 为您要填充的每个图块采样一次,然后使用您的规则来决定使用哪个图块。

【讨论】:

    【解决方案2】:

    最近的一篇文章讨论了解决此问题的方法,说明了将GKPerlinNoiseSource 映射到SKTileMapNode 的方法。我认为这可能比接受的答案更有用(尽管接受的答案比本文早几年)。

    https://www.hackingwithswift.com/example-code/games/how-to-create-a-random-terrain-tile-map-using-sktilemapnode-and-gkperlinnoisesource

    请注意这篇文章在 Swift 5.2 中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-01
      • 2018-01-07
      • 1970-01-01
      相关资源
      最近更新 更多