| Programació | Gràfics | Recursos CITCEA | ||
| Tutorial | Exemples | Projectes | Inici |
Els sprites són elements gràfics que podem fer aparèixer a qualsevol posició de la pantalla. Un mateix fitxer gràfic pot tenir diversos sprites i en cada moment podrem triar quin volem que es mostri. Per fer aquest exemple emprarem els dibuixos del fitxer figures.bmp que conté les imatges que es mostren a continuació:

De fet, la imatge és molt petita i el que observem aquí és una versió ampliada. En aquesta imatge hi ha quatre sprites de 16 ⨯ 16 píxels cada un. En la següent imatge mostrem les línies de separació i la quadrícula que ens ajuden a visualitzar-ho.

Podem fer servir algun programa (per exemple, IrfanView) per crear la imatge i guardar-la en format BMP.
En el mateix fitxer hi podria haver un o més sprites. El primer sprite (índex 0) és el de la part superior esquerra (en el nostre cas la fletxa verda), el segon (1) el del seu costat (cercle marró). Quan s'ha acabat la primera filera es passa a la segona i així successivament. També podem fer servir IrfanView per combinar diverses rajoles en una mateixa imatge.
El següent programa mostra, successivament, els quatre sprites en el centre de la pantalla.
import time import board import displayio import adafruit_imageload
# Creem un objecte per a la pantalla
pant = board.DISPLAY
# Carreguem els sprites i la paleta des del fitxer
doc_sprites, paleta = adafruit_imageload.load("/figures.bmp",
bitmap=displayio.Bitmap,
palette=displayio.Palette)
# Definim els sprite
sprite = displayio.TileGrid(doc_sprites, pixel_shader=paleta,
width = 1, height = 1,
tile_width = 16, tile_height = 16)
# Creem un grup per als sprites
grup = displayio.Group(scale=1)
# Afegim els sprites al grup
grup.append(sprite)
# Mostrem el grup a la pantalla
pant.root_group = grup
# Situem l'sprite centrat a la pantalla
grup.x = 160//2 - 8
grup.y = 128//2 - 8
# Inicialitzem l'index
i = 0
while True:
sprite[0] = i
i += 1
if i > 3:
i = 0
time.sleep(1)
Amb tile_width i tile_height hem indicat el nombre de píxels que té cada sprite. Podríem fer que els sprites fossin els doble de grans posant scale=2 en la instrucció on creem el grup.
Ara anem a mostrar dos sprites a la pantalla, un al costat de l'altre. El programa és molt similar i hem marcat els canvis:
import time import board import displayio import adafruit_imageload
# Creem un objecte per a la pantalla
pant = board.DISPLAY
# Carreguem els sprites i la paleta des del fitxer
doc_sprites, paleta = adafruit_imageload.load("/figures.bmp",
bitmap=displayio.Bitmap,
palette=displayio.Palette)
# Definim els sprite
sprite = displayio.TileGrid(doc_sprites, pixel_shader=paleta,
width = 2, height = 1,
tile_width = 16, tile_height = 16)
# Creem un grup per als sprites
grup = displayio.Group(scale=1)
# Afegim els sprites al grup
grup.append(sprite)
# Mostrem el grup a la pantalla
pant.root_group = grup
# Situem l'sprite centrat a la pantalla
grup.x = 160//2 - 8
grup.y = 128//2 - 8
# Inicialitzem l'index
i = 0
j = 1
while True:
sprite[0] = i
sprite[1] = j
i += 1
j += 1
if i > 3:
i = 0
if j > 3:
j = 0
time.sleep(1)
Canviant les coordenades x i y del grup podem moure l'sprite on ens convingui. En el següent programa seguim mostrant successivament els quatre sprites però mostrem cada un en un dels quatre quadrants de la pantalla.
import time import board import displayio import adafruit_imageload
# Creem un objecte per a la pantalla
pant = board.DISPLAY
# Carreguem els sprites i la paleta des del fitxer
doc_sprites, paleta = adafruit_imageload.load("/figures.bmp",
bitmap=displayio.Bitmap,
palette=displayio.Palette)
# Definim els sprite
sprite = displayio.TileGrid(doc_sprites, pixel_shader=paleta,
width = 1, height = 1,
tile_width = 16, tile_height = 16)
# Creem un grup per als sprites
grup = displayio.Group(scale=1)
# Afegim els sprites al grup
grup.append(sprite)
# Mostrem el grup a la pantalla
pant.root_group = grup
# Situem l'sprite centrat a la pantalla
grup.x = 160//2 - 8
grup.y = 128//2 - 8
# Inicialitzem l'index
i = 0
while True:
sprite[0] = i
# Situem l'sprite en un quadrant
grup.x = 160//4 + ((160//2) * (i % 2)) - 8
grup.y = 128//4 + ((128//2) * ((i//2) % 2)) - 8
i += 1
if i > 3:
i = 0
time.sleep(1)

Esta obra de Oriol Boix está licenciada bajo una licencia no importada Creative Commons Reconocimiento-NoComercial-SinObraDerivada 3.0.