SKTileMap 从 GKNoiseMap 获取值
SKTileMap getting Values from GKNoiseMap
我一直在关注 GKNoiseMaps 上的 Apple Docs,我设法生成了一张图像,它看起来非常好
在此处使用此代码
class GameScene: SKScene {
class Noise: GKNoise {
var NoiseSource = GKPerlinNoiseSource(frequency: 0.05, octaveCount: 3, persistence: 1, lacunarity: 1, seed: Int32(arc4random_uniform(UInt32(500 - 1))))
override init(_ noiseSource: GKNoiseSource, gradientColors: [NSNumber : UIColor]) {
super.init(NoiseSource, gradientColors: [ (+1.0 as NSNumber): UIColor.red, (-1.0 as NSNumber) : UIColor.black])
}
}
let noise = Noise()
let Vector1 = vector_double2(1.0, 1.0)
override func didMove(to view: SKView) {
let NoiseMap = GKNoiseMap(noise, size: vector_double2(300.0, 300.0),
origin: vector_double2(0.0, 0.0),
sampleCount: vector_int2(100),
seamless: true)
let texture = SKTexture(noiseMap: NoiseMap)
let Node = SKSpriteNode(texture: texture)
Node.size = CGSize(width: 1000,height: 1000)
Node.position = CGPoint(x: 0,y: 0)
self.addChild(Node)
}
override func update(_ currentTime: TimeInterval) {
// Called before each frame is rendered
}
}
现在我如何使用这里更新的代码创建 SKTileMap
class GameScene: SKScene {
class Noise: GKNoise {
var NoiseSource = GKPerlinNoiseSource(frequency: 0.05, octaveCount: 3, persistence: 1, lacunarity: 1, seed: Int32(arc4random_uniform(UInt32(500 - 1))))
override init(_ noiseSource: GKNoiseSource, gradientColors: [NSNumber : UIColor]) {
super.init(NoiseSource, gradientColors: [(+1.0 as NSNumber): UIColor.red, (-1.0 as NSNumber) : UIColor.black])
}
}
let noise = Noise()
let Vector1 = vector_double2(1.0, 1.0)
override func didMove(to view: SKView) {
let NoiseMap = GKNoiseMap(noise, size: vector_double2(300.0, 300.0),
origin: vector_double2(0.0, 0.0),
sampleCount: vector_int2(100),
seamless: true)
let tileGroup = [SKTileGroup]()
let tileSet = SKTileSet(tileGroups: tileGroup)
let map = SKTileMapNode(tileSet: tileSet, columns: 10, rows: 10, tileSize: CGSize(width: 20,height: 20), tileGroupLayout: tileGroup)
}
override func update(_ currentTime: TimeInterval) {
// Called before each frame is rendered
}
}
并按照 Apple 文档中的说明使用 GKNoiseMap 的值生成 SKTileMap?
任何帮助将不胜感激,因为我并不真正了解 SKTileMaps 及其工作原理
您可以使用从 NoiseMap
创建的纹理创建一个 SKTileDefinition
。然后可以在任何位置将此图块绘制到 SKTileMapNode
中。此示例遍历所有列和行并设置磁贴。我将 NoiseMap 的尺寸设置为 64 x 64,因为这是瓷砖的典型尺寸。
override func sceneDidLoad() {
let noise = Noise()
let noiseMap = GKNoiseMap(noise, size: vector_double2(64.0, 64.0), origin: vector_double2(0.0, 0.0), sampleCount: vector_int2(100), seamless: true)
let bgTexture = SKTexture(noiseMap: noiseMap)
let bgDefinition = SKTileDefinition(texture: bgTexture, size: bgTexture.size())
let bgGroup = SKTileGroup(tileDefinition: bgDefinition)
bgGroup.name = "noiseTest"
let tileSet = SKTileSet(tileGroups: [bgGroup])
let bgNode = SKTileMapNode(tileSet: tileSet, columns: 10, rows: 10, tileSize: bgTexture.size())
let tile = bgNode.tileSet.tileGroups.first(where: { [=10=].name == "noiseTest" })
for column in 0 ..< bgNode.numberOfColumns {
for row in 0 ..< bgNode.numberOfRows {
bgNode.setTileGroup(tile, forColumn: column, row: row)
}
}
bgNode.position = CGPoint(x: 0, y: 0)
bgNode.setScale(1)
self.addChild(bgNode)
}
我一直在关注 GKNoiseMaps 上的 Apple Docs,我设法生成了一张图像,它看起来非常好
在此处使用此代码
class GameScene: SKScene {
class Noise: GKNoise {
var NoiseSource = GKPerlinNoiseSource(frequency: 0.05, octaveCount: 3, persistence: 1, lacunarity: 1, seed: Int32(arc4random_uniform(UInt32(500 - 1))))
override init(_ noiseSource: GKNoiseSource, gradientColors: [NSNumber : UIColor]) {
super.init(NoiseSource, gradientColors: [ (+1.0 as NSNumber): UIColor.red, (-1.0 as NSNumber) : UIColor.black])
}
}
let noise = Noise()
let Vector1 = vector_double2(1.0, 1.0)
override func didMove(to view: SKView) {
let NoiseMap = GKNoiseMap(noise, size: vector_double2(300.0, 300.0),
origin: vector_double2(0.0, 0.0),
sampleCount: vector_int2(100),
seamless: true)
let texture = SKTexture(noiseMap: NoiseMap)
let Node = SKSpriteNode(texture: texture)
Node.size = CGSize(width: 1000,height: 1000)
Node.position = CGPoint(x: 0,y: 0)
self.addChild(Node)
}
override func update(_ currentTime: TimeInterval) {
// Called before each frame is rendered
}
}
现在我如何使用这里更新的代码创建 SKTileMap
class GameScene: SKScene {
class Noise: GKNoise {
var NoiseSource = GKPerlinNoiseSource(frequency: 0.05, octaveCount: 3, persistence: 1, lacunarity: 1, seed: Int32(arc4random_uniform(UInt32(500 - 1))))
override init(_ noiseSource: GKNoiseSource, gradientColors: [NSNumber : UIColor]) {
super.init(NoiseSource, gradientColors: [(+1.0 as NSNumber): UIColor.red, (-1.0 as NSNumber) : UIColor.black])
}
}
let noise = Noise()
let Vector1 = vector_double2(1.0, 1.0)
override func didMove(to view: SKView) {
let NoiseMap = GKNoiseMap(noise, size: vector_double2(300.0, 300.0),
origin: vector_double2(0.0, 0.0),
sampleCount: vector_int2(100),
seamless: true)
let tileGroup = [SKTileGroup]()
let tileSet = SKTileSet(tileGroups: tileGroup)
let map = SKTileMapNode(tileSet: tileSet, columns: 10, rows: 10, tileSize: CGSize(width: 20,height: 20), tileGroupLayout: tileGroup)
}
override func update(_ currentTime: TimeInterval) {
// Called before each frame is rendered
}
}
并按照 Apple 文档中的说明使用 GKNoiseMap 的值生成 SKTileMap?
任何帮助将不胜感激,因为我并不真正了解 SKTileMaps 及其工作原理
您可以使用从 NoiseMap
创建的纹理创建一个 SKTileDefinition
。然后可以在任何位置将此图块绘制到 SKTileMapNode
中。此示例遍历所有列和行并设置磁贴。我将 NoiseMap 的尺寸设置为 64 x 64,因为这是瓷砖的典型尺寸。
override func sceneDidLoad() {
let noise = Noise()
let noiseMap = GKNoiseMap(noise, size: vector_double2(64.0, 64.0), origin: vector_double2(0.0, 0.0), sampleCount: vector_int2(100), seamless: true)
let bgTexture = SKTexture(noiseMap: noiseMap)
let bgDefinition = SKTileDefinition(texture: bgTexture, size: bgTexture.size())
let bgGroup = SKTileGroup(tileDefinition: bgDefinition)
bgGroup.name = "noiseTest"
let tileSet = SKTileSet(tileGroups: [bgGroup])
let bgNode = SKTileMapNode(tileSet: tileSet, columns: 10, rows: 10, tileSize: bgTexture.size())
let tile = bgNode.tileSet.tileGroups.first(where: { [=10=].name == "noiseTest" })
for column in 0 ..< bgNode.numberOfColumns {
for row in 0 ..< bgNode.numberOfRows {
bgNode.setTileGroup(tile, forColumn: column, row: row)
}
}
bgNode.position = CGPoint(x: 0, y: 0)
bgNode.setScale(1)
self.addChild(bgNode)
}