Salut,
J'ai écrit deux outils pour construire des feuilles de sprites à partir de la ligne de commande et j'aimerais votre opinion à leur sujet.
Le premier outil se nomme auto-pack-my-sprites ; il reçoit une collection de fichiers d'images et construit une feuille de sprites les contenant :
1 2
| # crée un fichier nommé sprite-sheet.png avec toutes les resources du dossier assets.
auto-pack-my-sprites assets/*.png |
Cet outil accepte des options pour contrôler la taille de la feuille, pour appliquer un effet de débordement (bleeding) et pour ajuster l'écart entre les sprites, entre autres. Il peut aussi générer un atlas au format CSS, Cocos2d-x et en texte brut :
1 2 3 4 5 6 7 8 9 10 11
| # crée un fichier nommé sprites.png, dont la largeur et la hauteur sont
# limités à 2048 pixels, contenant toutes les images du dossier assets/dry,
# tels quels, et toutes les images du dossier assets/bleed avec un filtre
# de débordement ; sans espace entre les sprites, et génère un atlas au
# format Cocos2d-x.
auto-pack-my-sprites --output "sprites" \
--size 2048x2048 \
assets/dry/*.png \
--bleeding assets/bleed/*.png \
--margin 0 \
--plist |
Il gère aussi la génération de plusieurs feuilles si les sprites ne peuvent pas tous tenir dans une seule. Sur certains points cet outil est similaire à glue et à la version en ligne de commande de TexturePacker.
Le second outil est pack-my-sprites ; il crée les sprites en combinant certains calques choisis dans une image XCF (le format de GIMP) puis il arrange ces sprites dans une feuille. Cela permet de se libérer de l'étape pénible de la production des sprites en fichiers individuels à partir de GIMP.
Par exemple, je dessine toutes les éléments d'une animation dans plusieurs calques sous GIMP :
Puis je décris dans un fichier comment construire les images de l'animation :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| sprite_sheet "projectiles" 256 x 512 margin 1
lava "water-fire-stone.xcf.bz2"
"lava 1" image_size * 1 with lava
"base"
;
"lava 2" image_size * 1 with lava
"base 2"
;
"lava 3" image_size * 1 with lava
"base 3"
;
"lava 4" image_size * 1 with lava
"base 2"
"bubble right 1"
;
"lava 5" image_size * 1 with lava
"base"
"bubble right 2"
;
/*
more frames
*/ |
Et je lance l'outil sur ce fichier pour générer la feuille de sprites :
pack-my-sprites projectile.spritedesc
Et hop :
À partir de là je peux retravailler l'image source et reconstruire immédiatement la feuille de sprites. Tant que je ne change pas la liste des calques qui composent les sprites, le fichier en sortie sera immédiatement utilisable.
Le code C++ des outils est disponible sur GitHub sous les termes de la version 3 du contrat GNU AGPL.
Pour les futures versions j'envisage de gérer la création d'atlas au format utilisé par libgdx, d'ajouter un outil pour extraire les sprites d'une feuille de sprites et ajouter une option pour supprimer les contour transparents des sprites. J'envisage aussi de remplacer le format utilisé par `pack-my-sprites` par une syntaxe plus classique, certainement du Json.
Pensez-vous que ces outils vous seront utiles*? Y-a-t-il une fonctionnalité que vous aimeriez avoir ?
Partager