swift - 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
从地图集回来的东西做些什么来让他们“表现”吗?
解决方案
推荐阅读
- git - 如何在 Visual Studio 2017 中将 SemanticMerge 配置为合并工具
- django - 我正在处理与密码相关的 django 表单
- function - 按下按钮时如何返回值?
- geometry - 有没有更有效的方法来纹理圆?
- reactjs - 如何为 On submit 添加两个事件
- javascript - Discord Bot 找不到角色
- python - 在 Python Spyder 中自动清理绘图窗格
- c# - 尝试将实体框架与 Oracle DB 一起使用
- javascript - CTRL+C 在鼠标悬停时复制 URL
- php - CakePhp - 如何在验证中访问记录的 id?