如何将带有 alpha 的 PNG 转换为 RGBA4444 以便在 SpriteKit SKTexture 中使用它?
Posted
技术标签:
【中文标题】如何将带有 alpha 的 PNG 转换为 RGBA4444 以便在 SpriteKit SKTexture 中使用它?【英文标题】:How do I convert a PNG with alpha to RGBA4444 for using it in SpriteKit SKTexture? 【发布时间】:2016-12-12 10:20:50 【问题描述】:我有一堆透明 PNG,我想在带有 SKTexture
s 的 SKSpriteNode
动画中使用它们。我需要通过将纹理质量从RGBA8888
降低到RGBA4444
来调整SKTexture
s 的内存使用情况。
如何使用RGBA4444
纹理格式初始化SKTexture
?
编辑: ios Swift Game Development Cookbook:Simple Solutions for Game Development 建议 SKTexture
将支持 PVRTC 文件,如下所示:
但是,我无法让 SKSpriteNode
显示以这种方式生成的纹理。
【问题讨论】:
见***.com/questions/39106245/… 【参考方案1】:我刚刚尝试过,在 Xcode 8 中,here 中描述的 Output Texture Atlas 选项在 Build Settings 中不再可用。
我怀疑(但我可能是错的)控件现在已移到 Compression 内,如下图所示。
【讨论】:
我想让SKTexture
压缩纹理数据在内存中的唯一选择是使用纹理图集?我没有找到任何指向纹理压缩的 SKTexture
初始化选项。
@MarkusRautopuro:可能是的。但是,您也应该使用 Sprite Atlas 来实现更快的 CPU-GPU 通信。
问题是我有很大的PNG文件,而且很多。唯一的选择是以编程方式创建精灵图集。但是,我没有找到将压缩设置为SKTextureAtlas
的方法。【参考方案2】:
我通过使用TexturePacker 生成纹理图集 (.atlasc) 文件来规避此问题。使用 TexturePacker,您可以设置调整压缩,然后访问项目中的纹理图集,如下所示:
let atlas = SKTextureAtlas(named: "Atlas") // Atlas.atlasc in your project
let texture = atlas.textureNamed("original_texture_001.png")
【讨论】:
MoDJ 在这个答案***.com/a/39928198/2155985 中指出,Sprite Kit 中的所有纹理都将作为 RGBA8888 加载到内存中。我也需要确认一下。以上是关于如何将带有 alpha 的 PNG 转换为 RGBA4444 以便在 SpriteKit SKTexture 中使用它?的主要内容,如果未能解决你的问题,请参考以下文章
imagemagick 将 RGB PNG 转换为 CMYK PDF