2016-12-12 2 views
2

J'ai une pile de PNG transparents que j'aimerais utiliser dans une animation SKSpriteNode avec SKTexture s. Je devrais ajuster l'utilisation de la mémoire de SKTexture s en réduisant la qualité de la texture de RGBA8888 à RGBA4444.Comment convertir un fichier PNG avec alpha en RGBA4444 pour l'utiliser dans SpriteKit SKTexture?

Comment initialiser SKTexture avec le format de texture RGBA4444?

Edit:IOS Swift Game Development Cookbook: Simple Solutions pour le développement du jeu suggère que SKTexture aurait en charge les fichiers PVRTC comme suit:

enter image description here

Cependant, je ne pouvais pas obtenir un SKSpriteNode à afficher une texture générée de cette façon.

+1

Voir https://stackoverflow.com/questions/39106245/how-to-change-texture-format-to -rgba4444-pour-sprite-atlas-created-in-assets-xass/39928198 # 39928198 – MoDJ

Répondre

2

Je viens d'essayer et Xcode 8 l'option sortie Texture Atlas décrit here n'est plus disponible dans Build Settings.

Je suspecte (mais je peux me tromper) le contrôle a été maintenant déplacé à l'intérieur Compression comme vous pouvez le voir dans l'image suivante.

enter image description here

+0

Je suppose que la seule option pour que 'SKTexture' compresse les données de texture * en mémoire * est d'utiliser des atlas de texture? Je n'ai trouvé aucune option d'initialisation 'SKTexture' qui indiquerait la compression de texture. –

+0

@MarkusRautopuro: Oui probablement. Cependant, vous devriez également utiliser un Sprite Atlas pour une communication CPU-GPU plus rapide. –

+1

Le problème est que j'ai de gros fichiers PNG et beaucoup d'entre eux. La seule option serait de créer l'atlas des sprites par programme. Cependant, je n'ai pas trouvé un moyen de définir la compression sur 'SKTextureAtlas'. –

1

Je contournées cela en utilisant TexturePacker pour générer un fichier atlas de texture (.atlasc). Avec TexturePacker vous pouvez définir régler la compression, puis accéder à l'atlas de texture dans votre projet comme suit:

let atlas = SKTextureAtlas(named: "Atlas") // Atlas.atlasc in your project 
let texture = atlas.textureNamed("original_texture_001.png") 
+0

Comme MoDJ a souligné dans cette réponse http://stackoverflow.com/a/39928198/2155985, que toutes les textures dans Sprite Kit seront chargées en mémoire en tant que RGBA8888. Je dois confirmer cela aussi. –