Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/118.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios SKTileMap从GKNoiseMap获取值_Ios_Swift_Sprite Kit_Perlin Noise_Sktilemapnode - Fatal编程技术网

Ios SKTileMap从GKNoiseMap获取值

Ios SKTileMap从GKNoiseMap获取值,ios,swift,sprite-kit,perlin-noise,sktilemapnode,Ios,Swift,Sprite Kit,Perlin Noise,Sktilemapnode,我一直在关注GKNoiseMaps,我设法得到了一张图片,看起来真的很好 在这里使用此代码 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)

我一直在关注GKNoiseMaps,我设法得到了一张图片,看起来真的很好

在这里使用此代码

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: { $0.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)
}
override func sceneDidLoad(){
让噪音=噪音()
设noiseMap=GKNoiseMap(噪声,大小:vector_double2(64.0,64.0),原点:vector_double2(0.0,0.0),样本数:vector_int2(100),无缝:true)
设bgTexture=SKTexture(noiseMap:noiseMap)
让bgDefinition=SKTileDefinition(纹理:bgTexture,大小:bgTexture.size())
设bgGroup=SKTileGroup(tileDefinition:bgDefinition)
bgGroup.name=“noiseTest”
让tileSet=SKTileSet(tileGroups:[bgGroup])
让bgNode=SKTileMapNode(tileSet:tileSet,列:10,行:10,tileSize:bgTexture.size())
让tile=bgNode.tileSet.tileGroups.first(其中:{$0.name==“noiseTest”})
对于0..
好的,谢谢,我会测试它。顺便说一句,我的应用程序今天发布了(它与此无关),它被称为“垃圾鸭”,如果你能查看它,我将不胜感激!它起作用了!但是我需要根据噪声级别设置分幅。我正在尝试根据噪声级别创建一个贴图,因此贴图具有一定的随机性。如果使用init方法
public init(rules:[SKTileGroupRule])
初始化
SKTileGroup
,则可以指定
SKTileDefinitions
的数组。这应该可以处理随机性!你能用一个例子来更新你的答案吗?这样我们就不会因为回答不正确而陷入麻烦。我认为随机选择一个SKTileMapNode是一件独立的事情。你可以自己试试,然后再问另一个问题。