Adicionando Interação
Eventos vs. Input
Os eventos do teclado, a princípio, são muito parecidos com o input()
que usamos no Python desde o começo do semestre. Entretanto, essa semelhança pode ser bastante enganosa. A documentação da função pygame.event.get()
diz que ela "get events from the queue", mas o que é essa fila?
O Pygame é uma biblioteca de desenvolvimento de jogos, que, em sua grande maioria, possuem uma tela com imagens dinâmicas. Por esse motivo não seria interessante que os eventos do teclado se comportassem como o input()
, que trava o programa enquanto o usuário não digita algo e aperta ENTER. A solução encontrada pelo Pygame (na verdade, da maioria dos programas interativos) é receber as interações do usuário em segundo plano. Toda vez que o usuário aperta ou solta uma tecla, é criado um evento e adicionado em uma fila (mais ou menos como uma lista do Python), mas o programa não para de rodar.
Quando o programa chama for evento in pygame.event.get()
, o Pygame devolve e automaticamente remove os eventos que estão na fila. Assim, depois de concluir esse for
não haverá mais nenhum evento na fila.
A seguir apresentamos uma pequena tabela com algumas diferenças entre o input()
e os eventos do Pygame:
input() |
Eventos Pygame |
---|---|
Ao final da chamada sempre devolve um valor | É possível que nenhum evento tenha ocorrido (usuário não pressionou nenhuma tecla) |
Programa para até que o usuário digite algo | Programa não espera por eventos |
Exercício 1
Resposta
Assim que são recebidos, os eventos são adicionados à fila de eventos. Assim, os eventos pygame.KEYDOWN
e pygame.KEYUP
da tecla pygame.K_w
e pygame.KEYDOWN
da tecla pygame.K_s
são adicionados à fila. Depois da primeira chamada à função pygame.event.get()
, esses 3 primeiros eventos já foram consumidos/tratados e são automaticamente removidos pelo Pygame.
Seguindo com os acontecimentos, os eventos pygame.KEYUP
da tecla pygame.K_s
e pygame.KEYDOWN
da tecla pygame.K_d
são recebidos e adicionados à fila. Quando a função pygame.event.get()
é chamada novamente, apenas os 2 últimos eventos estarão presentes.
Agora que entendemos melhor como os eventos funcionam, vamos usar o teclado para controlar um jogador na tela.