Sprite Organizer pt2

Dopo la pubblicazione del secondo articolo sulla gestione degli SpriteSheet, questa volta utilizzando le informazioni memorizzate nel file di configurazione originato dalla SpriteOrganizer, mi sono deciso a modificare ulteriormente il mio tool aggiungendo un paio di funzionalità che possono tornare comodo.

Quello che ho implementato si basa su seguenti requisiti:

  • Togliere il colore di sfondo dall’immagine
  • Poter gestire più immagini (ognuna con il suo colore di sfondo)

Vediamo quindi cosa è stato implementato.


Per la gestione di più immagini è necessario che il programma mantenga una lista degli SpriteSheet che stiamo gestendo. Per fare questo ho dovuto incapsulare le informazioni di interesse dello Sprite Sheet in una classe, che avrà quindi i seguenti campi:

public string Path { get; set; }
public List<Rectangle> Frames { get; set; }

Ho inoltre definito il [de]serializzatore xml per tale classe (in modo da renderne la lettura/scritta molto più agevole). Per i dettagli di tale codice vi rimando al codice sorgente.

Anche la struttura del file di configurazione generato e caricato dal programma sarà ora diversa: ci sarà un solo elemento radice conf il quale potrà avere molti elementi figli SpriteSheet.
Per la selezioni delle immagini ho reso disponibile una listbox dove verranno caricati i nomi delle immagini utilizzate (sia quando si carica un file di configurazione sia quando si aggiunge una nuova immagine alla collezione), come si può vedere dall’immagine sottostante.

Quando si va poi ad esportare la collezione di frame come singola immagine, il programma calcola le dimensioni massime del rettangolo (lo fa in due righe utilizzando le lambda expression)

                int maxH = spriteList.Max(p => p.Frames.Max(k => k.Height)) + padding;
                int maxW = spriteList.Max(p => p.Frames.Max(k => k.Width)) + padding;

e poi scorre tutti i frame contenuti nelle immagini (lo fa utilizzando una query LINQ per ordinare i frame per la coordinate Y ed X).
Durante la fase di rendering viene anche riconosciuto il colore di sfondo e sostituito con il colore trasparente (0,0,0,0). Per effettuare la sostituzione al momento non faccio altro che scorrere e controllare tutti pixel del rettangolo che ho appena scritto, e se il colore di un pixel è uguale a quello del pixel di coordinate (0,0) lo sostituisco con il colore trasparente.

Alla fine il risultato è buono. Ed il programma sembra promettere benone. In fondo un “buon programma” per la gestione degli sprite sheet ci vuole no?
Magari successivamente potrò aggiungere una funzionalità per definire delle animazioni direttamente dal tool e di esportare le informazioni in un file xml.

Vi allego i sorgenti come al solito.
Fatemi sapere se scaricate. Se vi servono spiegazioni in più sul codice ditemelo e ve le fornirò!
SpriteOrganizer_02.rar

Alla prossima

Lascia un commento

We use cookies to ensure that we give you the best experience on our website.
Ok