PyGame Sprite 1

Alcuni mesi fa ho trovato una serie di esempi sul pygame. Qui troverete la versione completa del articolo io postero solamente codice e una breve spiegazione tratta sempre dal articolo originale.

Il videogioco è composto in questo caso da cinque funzioni e due classi che sono riportate di seguito:

La prima funzione serve per caricare i vari frame di una sprite che sono necessari per creare l’animazione. La funzione è stata pensata per caricare le immagini con il “nome” del file passato (sempre in formato .png) e per memorizzari i vari frame, sia che essi siano in più file (quindi va indicato il numero di file che compongono l’animazione passando “num”), sia che il file sia uno solo, ed in quest’ultimo caso si appoggerà alle variabili di larghezza (“w”) e altezza (“h”) opportunamente passate per suddividere l’immagine in frame.

La seconda funzione è stata creata per necessità. Infatti c’è un bug che concerne la funzio Rect.move_ip, che muove un oggetto rect secondo le coordinate passategli. In poche parole, la funzione non supporta dei movimenti con numeri float, quindi ho dovuto riadattare la funzione per far funzionare l’esempio. In certi casi questa può essere una grave limitazione, ma a seconde delle collisioni che gestite (rect, rect circolari, mask …) dovete controllare e testare il funzionamento corretto. Tutto sta per non perdere il realismo del videogioco, quindi tenetelo bene in mente. Per il nostro esempio ho pensato di adattarlo, così da far vedere anche come poteva essere una possibile soluzione al problema.

La terza funzione è la più semplice, ma non la meno importante: infatti tiene il tempo di gioco e serve per sincronizzare movimenti e animazioni.

Poi abbiamo due classi che gestiscono le esplosioni e il giocatore (da notare che estendono la classe Sprite di pygame). Infatti un oggetto Sprite non è niente altro che un’immagine affiancata da un oggetto rect, così da poter gestire le collisioni. Le sprites sono molto utili anche perché possono essere gestite in gruppi, permettendoci quindi di gestire anche, per esempio, profondità, collisioni multiple e renderizzazioni molto più facilmente di pitturare immagini sullo schermo.

Le ultime due funzioni gestiscono il loop di gioco: notrun() per quando il gioco termina, mentre run() per il gioco avviato. La condizione alla fine invece ci permette di utilizzare questo script sia come modulo che come programma stand-alone.

Start a Conversation

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.