Sprite sheets¶
Animació basada en sprite sheets¶
Una manera d’aconseguir l’animació dels diferents elements gràfics del joc és utilitzar els sprite sheets.
Sprite animat: un sprite que depenent del seu estat o moment en el temps es mostra amb una imatge (fotograma) diferent. Podríem calcular cada imatge durant el joc, però la tècnica dels sprite sheets consisteix en tenir-les precalculades, carregar-les a l’inici del joc i triar quina la que es visualitza en cada instant de temps (per comoditat i rapidesa).
Usos habituals:
personatge que mou les cames quan camina, ocell que aleteja, roda que dóna voltes…
personatge (o altre element) que canvia la imatge depenent del seu estat (idle, caminant a la dreta, a l’esquerra, saltant, atacant…)
efectes visuals, com ara explosions, fum, puntuacions sobre la pantalla…
Se sol guardar com una sola imatge molt gran amb tots els fotogrames, d’aquí que se’n diguin sprite sheets (pàgines de sprites) o mapes de textures. El més comú és que les diferents imatges estigui en forma matricial: cada fila d’imatges correspon a un estat i les diferents imatges d’una fila corresponen a diferents instants de temps.
Avantages: reduir el temps de càrrega de la imatge (en els jocs en xarxa); també facilitar la gestió de totes les imatges «de cop» (per exemple, si es volen escalar o canviar-los el color clau de transparència).
Els dos tipus d’animació més habitual impliquen bé repetició dels key-frames cíclica (f1->f2->f3->f1->f2->f3->f1->f2->f3->…), bé endavant-enrere (f1->f2->f3->f2->f1->f2->f3->f2->…). És convenient pensar que cadascuna de les imatges del sprite és un key-frame i que entre fotograma i fotograma s’intercala un temps d’espera, constant o variable.
Caution
Totes les imatges de l’sprite sheet han de tenir la mateixa mida i han d’estar igualment centrades. Si tenim un sprite sheet compost d’imatges de diferent mida, pot ser que estigui guardat com una imatge ràster + un fitxer en format json.
Sprite sheets en python i pygame¶
Com implementar-ho:
Dividir la imatge gran (el sheet) i utilitzar un atribut de la classe que sigui una llista amb les diferents imatges + comptador de frames i/o indicador de l’estat.
Utiltzar les
subsurfaces de pygameper aconseguir imatges que comparteixen els píxels.
Mòduls i biblioteques python per a treballar amb sprites¶
- Exemple
d’una classe que gestiona sprite sheets.
Pyganim, una biblioteca sobre pygame per treballar amb sprites animats.
Spritesheetlib, biblioteca per a llegir sprites desats en format json.
Recursos web d’sprite sheets¶
Busqueu sprite sheet al google images o bé sprite sheet database a google.
OpenGameArt.org, lloc web amb multitud de recursos de videojocs amb llicències lliures: imatges, sprite sheets, sons, músiques, tutorials, etc.
Sprite database, col·lecció d’imatges, sprite sheets i alguns sons/músiques extrets de jocs comercials.
Programes de creació i/o edicio de sprite sheets¶
Existeixen generadors de sprite sheets per a personatges, que permeten triar diferents paràmetres (tipus de personatge, color i estil dels cabells, roba, …). Cerqueu “Spritesheet Character Generator” a internet;