Je vous propose d'essayer TexturePacker
- vous pouvez simplement faire glisser et déposer toutes vos images et les emballer
- vous pouvez appliquer une compression différente - par exemple, utiliser des fichiers PNG indexés qui consomment beaucoup moins de mémoire - jusqu'à 70% de moins par rapport à un fichier PNG standard
- vous pouvez créer un fichier de données contenant le nom + la position de chacun de vos bâtiments
- la version gratuite pourrait déjà suffire pour créer les feuilles de sprite pour vous
Utilisez-vous un framework de développement de jeux comme AndEngine, Cocos2d-x ou LibGdx? => Aucun
Avez-vous besoin de toutes vos images chargées en même temps? Il semble que vous rencontrerez d'énormes problèmes de RAM sur les appareils cibles.
Mise à jour: Snake m'a envoyé des images. Comme promis, ils ne seront pas rendus publics ici, j'ai donc créé moi-même de l'art pour montrer comment réduire l'utilisation de la mémoire.
Dans l'image d'origine, seule une partie de l'image se déplaçait. J'ai placé un oiseau sur une maison pour le démontrer:
Fondamentalement, l'animation complète dans une feuille est un gros gaspillage de mémoire. Vous devez diviser les parties statiques et mobiles:
Statique:
Anim01:
Anim02:
Gardez la position d'origine de l'oiseau dans les images . C'est pourquoi il y a tellement d'espace vide au-dessus. Vous en avez besoin pour aligner l'animation.
Faites maintenant glisser les images sur TexturePacker et sélectionnez les paramètres suivants
- Format de données: hachage JSON (ou XML si vous préférez)
- TrimMode: Trim (cela crée des rectangles)
- Format de pixel: INDEXÉ 8 bits - pour créer des fichiers PNG 8 bits (environ 70% de mémoire en moins)
- Autoriser la rotation: faux
- Entrez un nom de fichier pour les données
Le résultat est que vous obtenez maintenant 2 fichiers: la feuille de sprite et un fichier de description JSON.
"house_anim_01.png":
{
"frame": {"x":351,"y":246,"w":110,"h":79},
"rotated": false,
"trimmed": true,
"spriteSourceSize": {"x":67,"y":8,"w":110,"h":79},
"sourceSize": {"w":400,"h":400},
"pivot": {"x":0.5,"y":0.5}
},
Les parties importantes sont frame et spriteSourceSize .
Le cadre vous donne l'emplacement du sprite d'origine dans la feuille de sprite.
spriteSourceSize vous donne le décalage pour dessiner l'image - les parties de l'image qui sont laissées de côté à cause du découpage:
Une routine de dessin de pseudo-code simple ressemble à ceci:
drawImage(spritename, posX, posX)
{
data = sheetData[spritename]
offsetX = data.spriteSourceSize.x
offsetY = data.spriteSourceSize.y
frameX = data.frame.x
frameY = data.frame.y
width = data.frame.w
height = data.frame.h
screen.draw(sheetImage, posX+offsetX, posY+offsetY, width, height)
}
Vous devrez peut-être ajuster le calcul du décalage en fonction du point de pivot / origine dans votre système graphique. La routine ci-dessus suppose un système de coordonnées dont l'origine est en haut à gauche.
Puis dessinez simplement la maison en 2 passes:
draw("background", 100, 100);
draw("anim_01", 100, 100);
Vous n'avez pas à vous soucier des décalages - car les images sont déjà alignées.