Il metodo blit() di pygame
La funzione blit() è un metodo degli oggetti surface che mi permette di visualizzare un'immagine o una superficie grafica sopra un'altra.
oggetto1.blit(oggetto2, (x,y))
- L'oggetto1 è la superficie (surface object) ossia l'area grafica di riferimento.
- L'oggetto2 è l'immagine da disegnare sopra la superficie.
- La tupla (x,y) indica le coordinate cartesiane della superficie (oggetto1) dove disegnare l'oggetto2.
A cosa serve?
Il metodo blit() mi consente di visualizzare un'immagine, uno sprite o un testo nell'area di gioco.
Nota. Blitting vuol dire disegnare un'immagine su un'altra.
Un esempio pratico
Questo script utilizza il metodo blit per visualizzare un'immagine digitale sulla superficie di gioco.
- import pygame
- pygame.init()
- finestra = pygame.display.set_mode((400,300))
- finestra.fill((255,255,255))
- icona = pygame.image.load('smile.png')
- finestra.blit(icona, (170, 100))
- pygame.display.update()
- running = True
- while running:
- for event in pygame.event.get():
- if event.type == pygame.QUIT:
- running=False
In questo script la superficie principale è assegnata alla variabile finestra (riga 3).
E' larga 400 pixel e alta 300 pixel.
finestra = pygame.display.set_mode((400,300))
Alla riga 5 carico il file dell'immagine digitale "smile.png" nella variabile icona.
icona = pygame.image.load('smile.png')
Poi utilizzo il metodo blit() alla riga 6 per disegnare l'immagine sopra la superficie alle coordinate cartesiane (170,100).
finestra.blit(icona, (170, 100))
Il risultato in output è il seguente
Da notare che il metodo blit() sovrappone le immagini in sequenza.
Pertanto, se scrivo un secondo blit alle stesse coordinate (x,y) o simili si sovrappone al primo blit.
finestra.blit(icona, (170, 100))
finestra.blit(icona, (200, 120))
Nel risultato in output le immagini sono parzialmente sovrapposte.
Nota. Il metodo blit() richiede che la superficie grafica non sia stata precedentemente bloccata, ad esempio da un oggetto PixelArray. Pertanto devo ricordarmi sempre di sbloccare l'area dopo aver usato PixelArray con la funzione del.
E così via.