首页 > 解决方案 > SKTextureAtlas:检索到的纹理与原始纹理相比表现不同

问题描述

我有很多问题,SKTextureAtlas我想知道是否值得坚持。它似乎在模拟器上坏了,但我在设备上也遇到了问题。

我的目标是能够生成 - 并保存到设备以在下次启动时检索 - 具有程序生成图像的自定义纹理图集。

我的“保存图集”函数遍历纹理,检索它们,并尝试将它们保存为 png 文件。它适用于原始纹理,但只是使用检索到的纹理保存空白图像。我不知道为什么会这样。下面的代码说明了如果你把它放在一个点SKScene

        let label = SKLabelNode(text: "Hello World")
    let view = SKView()
    let texture = view.texture(from: label)!
    let cgImage = texture.cgImage()
    let uiImage = UIImage(cgImage: cgImage)
    
    let atlas = SKTextureAtlas(dictionary: ["hello":uiImage])
    let retrievedTex = atlas.textureNamed("hello")
    
    //       let pngData = uiImage.pngData()
    let pngData = UIImage(cgImage: (retrievedTex.cgImage())).pngData()
    //save the data
    guard let documentDirectoryUrl = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first else { print("Failed to find document directory");return }
    let fileUrl = documentDirectoryUrl.appendingPathComponent("Hello.png")
    do {
        try pngData!.write(to: fileUrl)
    }
    catch {
        print("Failed to write PNG data: \(error.localizedDescription)")
    }
    // Load and display
    if let data = FileManager.default.contents(atPath: fileUrl.path) {
        guard let image = UIImage(data: data) else {return}
        let tex = SKTexture(image: image)
        let sprite = SKSpriteNode(texture: tex)
        addChild(sprite)
        sprite.position = CGPoint(x: UIScreen.main.bounds.width/2, y: UIScreen.main.bounds.height/2)
    }

这在模拟器上根本不起作用(我不得不接受这是一个cgImage错误),但在设备上它会显示扭曲的纹理。let pngData...如果您将该行换成注释掉的版本,您可以看到它是如何工作的。

我能用SKTextures从地图集回来的东西做些什么来让他们“表现”吗?

标签: swiftsprite-kitsktexturesktextureatlas

解决方案


推荐阅读