我有很多问题,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
从地图集回来的东西做些什么来让他们“表现”吗?