PyGame 0

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.

Con questa riga di codice memorizziamo il nome della nostra immagine di sfondo, che per essere visualizzata corretamente dovrà essere di 640×480 pixel, vedremo poi perché.

Con questi comandi importiamo le librerie necessarie, ovvero le librerie pygame nella prima riga, le variabili locali nella seconda e l’uscita per il programma dalle librerie di sistema nell’ultima. Fra poco vedremo a cosa servono.

La libreria Pygame è divisa in moduli che gestiscono vari tipi di eventi, per esempio display gestirà lo schermo, mentre mixer servirà per caricare e gestire eventi sonori. Tutti i moduli sono avviabili singolarmente, ma con pygame.init() li avvieremo tutti insieme, così che rimarranno a nostra disposizione quando ne avremo bisogno.

Caricare i moduli singolarmente ne guadagnerà in velocità, perché se per esempio non abbiamo bisogno dell’audio, si caricheranno cose inutilizzate in memoria, rallentando di conseguenza il programma. Per questo codice di esempio non fa nessuna differenza, ma in un progetto più complesso, l’ottimizzazione ha la sua buona parte per la riuscita del videogioco.

Con questa creiamo una finestra 640×480 con doppio buffer (da notare che dobbiamo scrivere solo DOUBLEBUF e non pygame.DOUBLEBUF perché abbiamo importato le variabili locali), accelerazione hardware (HWSURFACE) e con profondità 32 bit.

Qui settiamo il nome della finestra che abbiamo creato.

Ora carichiamo lo sfondo e lo convertiamo in una superficie per essere visualizzato sullo schermo. La conversione è necessaria per essere correttamente disegnato sullo schermo.

Questo è il vero corpo di gioco, per ora. Il primo ciclo equivale in poche parole ad una frame di gioco, mentre il secondo è indispensabile per controllare gli eventi al di fuori del gioco per far interagire l’utente. In questo caso basta controllare solamente se viene premuto il tasto di uscita della finestra (la ‘x’ della cornice).

Grazie a screen.blit, disegniamo il nostro sfondo dalle coordinate (0,0) in poi. Essendo la nostra finestra 640×480 pixel, è per questo motivo che l’immagine da visualizzare deve essere altrettanto grande, altrimenti sarebbe visualizzata solo una porzione. Vi ricordo che le coordinate dello schermo hanno l’origine nell’angolo in alto a sinistra e quindi anche le operazioni che fate sulle immagini tengono conto di questo.

L’ultima riga è un po’ più complessa da spiegare: avendo utilizzato l’accelerazione hardware abbiamo aggiunto un secondo buffer; in poche parole in questo secondo buffer il computer si prepara il prossimo frame da visualizzare. Quindi quando stampiamo a video la nostra immagine non dobbiamo ridisegnare da capo, ma dobbiamo semplicemente scambiare il buffer attuale con quello successivo. In questo modo si evitano discrepanze visive dovute al refresh della memoria video che deve ridisegnare ogni volta la stessa immagine sullo stesso buffer.

Start a Conversation

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