Vorrei proporti di provare TexturePacker
- puoi semplicemente trascinare e rilasciare tutte le tue immagini e farle impacchettare
- puoi applicare una compressione diversa, ad esempio utilizzare PNG indicizzati che consumano molta meno memoria, fino al 70% in meno rispetto a un file PNG standard
- puoi creare un file di dati contenente il nome + posizione di ciascuno dei tuoi edifici
- la versione gratuita potrebbe già essere sufficiente per creare i fogli sprite per te
Usi un framework di sviluppo di giochi come AndEngine, Cocos2d-x o LibGdx? => Nessuno
Hai bisogno di caricare tutte le tue immagini contemporaneamente? Sembra che ti imbatterai in enormi problemi di RAM sui dispositivi di destinazione.
Aggiornamento: Snake mi ha inviato alcune immagini. Come promesso non li renderò pubblici qui, quindi ho creato un po 'di arte per dimostrare come ridurre l'utilizzo della memoria.
Nell'immagine originale, solo una parte dell'immagine era in movimento. Ho messo un uccello su una casa per dimostrarlo:
Fondamentalmente impacchettare l'animazione completa in un foglio è un grande spreco di memoria. È necessario dividere le parti statiche e mobili:
Statico:
Anim01:
Anim02:
Mantieni la posizione originale dell'uccello nelle immagini . Questo è il motivo per cui c'è così tanto spazio vuoto sopra. Ne hai bisogno per allineare l'animazione.
Ora trascina le immagini su TexturePacker e seleziona i seguenti parametri
- Formato dei dati: hash JSON (o XML se lo preferisci)
- TrimMode: Trim (questo crea rettangoli)
- Formato pixel: INDICE 8 bit - per creare PNG a 8 bit (circa il 70% di memoria in meno)
- Consenti rotazione: falso
- Immettere un nome file per i dati
Il risultato è che ora ottieni 2 file: il foglio sprite e un file di descrizione 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}
},
Le parti importanti sono frame e spriteSourceSize .
La cornice ti dà la posizione dello sprite originale nel foglio sprite.
spriteSourceSize ti dà l'offset per il disegno dell'immagine - le parti dell'immagine che vengono lasciate fuori a causa del taglio:
Una semplice routine di disegno pseudo-codice si presenta così:
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)
}
Potrebbe essere necessario regolare il calcolo dell'offset in base al punto di articolazione / origine nel sistema grafico. La routine sopra presuppone un sistema di coordinate la cui origine è in alto a sinistra.
Quindi disegna semplicemente la casa in 2 passaggi:
draw("background", 100, 100);
draw("anim_01", 100, 100);
Non devi preoccuparti degli offset, poiché le immagini sono già allineate.