La funzione event.get() di Pygame

La funzione event.get() di pygame restituisce tutti gli eventi accaduti al programma python, a partire dall'ultima volta che è stata chiamata la funzione.

pygame.event.get()

  • Se la funzione event.get() viene chiamata per la prima volta, restituisce l'elenco di tutti gli eventi accaduti dall'inizio dell'esecuzione del programma.
  • Se la funzione event.get() viene chiamata per la seconda volta, restituisce l'elenco degli eventi accaduti a partire dall'ultima volta che è stata eseguita.

    Nota. Quindi, non restituisce più gli eventi già letti la prima volta ma solo quelli avvenuti dopo. E via dicendo.

L'oggetto degli eventi è una sorta di coda che si azzera ogni volta che viene letta.

L'operazione di lettura degli eventi è nota come retrieving event ossia recupero eventi.

    Come funzione la gestione degli eventi in Pygame

    Quando un utente compie un'azione, ad esempio sposta il mouse o clicca sul pulsante mouse, preme un tasto, ecc... viene generato un evento.

    La libreria Pygame registra tutti gli eventi nell'oggetto pygame.event.

    la gestione degli eventi

    L'oggetto pygame.event può essere considerato come una coda degli eventi dove sono registrati tutti gli eventi accaduti in ordine cronologico.

    Pertanto, analizzando l'oggetto pygame.event posso intercettare le azioni dell'utente tramite lo script.

    Quando leggo un evento, viene automaticamente rimosso dalla coda.

    Esempio. Nel videogioco PacMan se l'utente preme il tasto della freccia a sinistra, lo script rileva l'evento e fa spostare a sinistra PacMan. In questo modo lo script può intercettare la pressione di tasti di movimento (freccia in giù, in su, destra e sinistra) e farli eseguire al personaggio del gioco.

    Questa tecnica di "ascolto" degli eventi è detta gestione degli eventi (event handling).

    In un programma richiamo continuamente la funzione event.get() all'interno di un loop per rilevare in tempo reale (o quasi) gli eventi ossia le azioni dell'utente.

    Nota. La coda degli eventi segue un ordine FIFO (First Input First Output). Quando leggo un evento, sto leggendo l'evento meno recente e non l'ultimo immesso nella coda. Una volta letto, l'evento viene rimosso dalla coda e passo all'evento successivo.

    Va infine considerato che la coda non è di dimensioni infinite.

    Una volta raggiunto il limite massimo, i successivi eventi non sono più registrati nella coda.

    Quindi, è opportuno leggerla di frequente.

    Un esempio pratico

    In questo script rilevo gli eventi nelle righe 7-11

    1. import pygame
    2. pygame.init()
    3. finestra1 = pygame.display.set_mode((400,300))
    4. pygame.display.set_caption('Titolo della finestra')
    5. running = True
    6. while running:
    7. for event in pygame.event.get():
    8. if event.type == pygame.QUIT:
    9. running = False
    10. if event.type == pygame.KEYDOWN:
    11. print("L'utente ha premuto un tasto sulla tastiera")
    12. pygame.display.update()

    La funzione event.get() si trova in un ciclo while continuo (righe 6-12).

    Nella riga 7 leggo tutti gli eventi accaduti tramite la funzione event.get()

    for event in pygame.event.get():

    La funzione event.get() mi restituisce ed elimina un evento alla volta dall'elenco degli eventi.

    Quindi, per leggere tutti gli eventi accaduti utilizzo un ciclo for e salvo in ogni iterazione il nome dell'evento nella variabile event.

    Nota. Ogni volta che leggo un evento, Pygame lo cancella automaticamente dalla lista degli eventi accaduti. Al termine del ciclo for lo script ha letto tutti gli eventi registrati.

    Nelle righe 8-9 verifico se l'evento corrente è pygame.QUIT ossia se l'utente ha premuto la X sulla finestra del gioco in alto a destra.

    Se il programma incontra questo evento, esce dal ciclo e termina l'esecuzione dello script.

    if event.type == pygame.QUIT:
    running = False
    pygame.display.update()

    Nelle righe10-11 verifico se l'evento corrente è pygame.KEYDOWN ossia se l'utente ha premuto un tasto della tastiera.

    Se il programma rileva questo eventi, stampa a video il messaggio sullo schermo "L'utente ha premuto un tasto sulla tastiera".

    if event.type == pygame.KEYDOWN:
    print("L'utente ha premuto un tasto sulla tastiera")

    Ogni evento ha un nome identificativo univoco.

    Ad esempio

    • QUIT (chiusura finestra)
    • KEYDOWN (pressione di un tasto sulla tastiera)
    • KEYUP (rilascio del tasto sulla tastiera)
    • MOUSEMOTION (movimento del mouse)
    • MOUSEBUTTONDOWN (pressione del tasto del mouse)
    • K_SPACE (pressione della barra spaziatrice sulla tastiera)
    • K_LEFT (pressione della freccia a sinistra sulla tastiera)

    Ovviamente l'elenco degli eventi è molto lungo ma il funzionamento è sempre lo stesso.

    Questa breve lista dovrebbe rendere l'idea.

    E così via.

     


     

    Segnalami un errore, un refuso o un suggerimento per migliorare gli appunti

    FacebookTwitterLinkedinLinkedin
    knowledge base

    PyGame