Sito web di notizie tecnologiche e videogames.

Pygame: muovere un oggetto e farlo rimbalzare sui bordi

74

Nello scorso articolo abbiamo introdotto la libreria pygame creando il nostro primo programma che non faceva altro che aprire una finestra di sfondo azzurro che si chiudeva quando si cliccava sulla X. In questo articolo faremo un passo avanti aggiungendo al nostro programma un oggetto che si muove da solo all’interno della finestra che rimbalza sui bordi.

Primo passo: definire le caratteristiche dell’oggetto

Il nostro oggetto sarà un rettangolo, quindi dobbiamo dichiarare le variabili di larghezza e lunghezza del rettangolo, oltre che alla coordinata del punto in cui lo vogliamo fare spawnare.

width_rect = 50   #larghezza
height_rect = 50  #altezza
x_rect = 50       #x del rettangolo
y_rect = 100      #y del rettangolo

Una volta fatto questo creiamo il nostro rettangolo tramite un’istruzione passandole come argomenti le variabili che abbiamo appena definito. L’istruzione di creazione del rettangolo è la seguente:

rect = pygame.draw.rect(window, RED, [x_rect, y_rect, width_rect, height_rect])

In questo momento l’output del nostro programma sarà il seguente:

Pygame: muovere un oggetto e farlo rimbalzare sui bordi

Secondo passo: muovere il rettangolo

Per muovere il nostro rettangolo c’è bisogno di definire altre due variabili che determinano di quanto il rettangolo si muoverà ad ogni esecuzione del game loop.

x_speed = 3
y_speed = 3

Ad ogni esecuzione del game loop quando vengono aggiornate tutte le variabili le coordinate del rettangolo verranno incrementate in modo da farlo spostare nella finestra.

Per fare ciò dobbiamo spostare l’istruzione di creazione del rettangolo nel game loop, poiché lo ricreeremo ad ogni esecuzione del ciclo quando le variabili verranno modificate. Ogni volta che creiamo il nuovo rettangolo dobbiamo cancellare quello precedente, quindi ogni volta ripuliremo lo schermo.

Aggiungere quindi nel game loop le seguenti righe:

window.fill(LIGHT_BLUE) #puliamo lo schermo
x_rect += x_speed
y_rect += y_speed
rect = pygame.draw.rect(window, RED, [x_rect, y_rect, width_rect, height_rect])

NB: è fondamentale mettere window.fill(LIGHT_BLUE) prima della creazione del rettangolo.

Terzo passo: far rimbalzare il rettangolo

Per far rimbalzare il nostro rettangolo dobbiamo prima capire come funziona il sistema di coordinate di pygame. Il sistema di coordinate di pygame ha infatti l’origine degli assi (0,0) in alto a sinistra. I valori dell’asse delle ordinate si incrementano andando verso il basso, mentre i valori dell’asse delle ascisse si incrementano procedendo verso destra.

Pygame: muovere un oggetto e farlo rimbalzare sui bordi

Una volta appreso ciò sarà più facile comprendere le istruzioni che vanno inserite nel game loop:

# Quando il rettangolo tocca i bordi laterali inverti la direzione delle x
if (x_rect + width_rect >= WIDTH or x_rect <= 0):
     x_speed *= -1
# Quando il rettangolo tocca il bordo superiore/inferiore inverti la direzione delle y
if (y_rect + height_rect >= HEIGHT or y_rect <= 0):
     y_speed *= -1

NB: Per controllare se il rettangolo stia toccando il bordo di destra della finestra bisogna fare questo confronto: x_rect + width_rect>= WIDTH, perché x_rect indica l’origine del rettangolo, ovvero il punto in alto a sinistra, quindi oltre alla x del rettangolo devo aggiungere anche la sua larghezza, ovvero width_rect.

Pygame: muovere un oggetto e farlo rimbalzare sui bordi

Quarto passo: clock & FPS

Per definire quante volte al secondo verrà eseguito il game loop definiamo due variabili fuori dal loop:

clock = pygame.time.Clock()
FPS = 30

Successivamente aggiungiamo questa riga alla fine del game loop:

clock.tick(FPS)

Alla fine il codice risulterà come il seguente:

 Pygame: muovere un oggetto e farlo rimbalzare sui bordi

Se vuoi saperne di più … articolo precedente

 

Commenti