Adicionando Interação
Outros eventos
Nossa etapa final da introdução será permitir que nosso usuário interaja com nosso jogo. Já sabemos:
- criar uma estrutura de jogo básica
- desenhar imagens na tela
- escrever texto na tela
- fechamos a janela quando o usuário clica no botão de fechar
Esse último ponto é feito na função recebe_eventos
, quando o evento pygame.QUIT
é recebido.
Na verdade, todas as interações do usuário com nosso jogo chegam via retorno da função pygame.event.get()
! Vamos ver alguns exemplos:
- quando o usuário aperta o botão esquerdo do mouse no nosso jogo recebemos um evento do tipo
pygame.MOUSEBUTTONDOWN
. Quando este botão é liberado é enviado um evento do tipopygame.MOUSEBUTTONUP
. - toda tecla do teclado ao ser pressionada gera eventos similares:
pygame.KEYDOWN
e, em seguida,pygame.KEYUP
. - se a tela do jogo for redimensionada recebemos um evento do tipo
pygame.VIDEORESIZE
.
Note que os nomes dos eventos são bastante descritivos. Vamos agora olhar novamente a função recebe_eventos
:
def recebe_eventos():
for evento in pygame.event.get():
if evento.type == pygame.QUIT:
return False
return True
Exercício 1
Resposta
O evento pygame.KEYDOWN
é recebido quando a tecla é pressionada e, quando o usuário soltá-la o evento pygame.KEYUP
é enviado para nosso programa. Note que existem vários tipos de eventos, então a opção com o else
não é válida: ela mostra a mensagem em qualquer evento que não seja pygame.QUIT
.
Agora vamos ver como extrair informações relevantes destes eventos. De acordo com o tipo do evento, a variável evento
do código acima pode conter os seguintes atributos (uma lista mais completa de atributos pode ser encontrada na documentação):
Tipo do Evento | Atributos |
---|---|
pygame.MOUSEBUTTONDOWN |
pos, button |
pygame.MOUSEBUTTONUP |
pos, button |
pygame.MOUSEMOTION |
pos, button, rel |
pygame.KEYUP |
key, mod |
pygame.KEYDOWN |
key, mod |
A tabela acima indica que, se a variável evento
for do tipo, pygame.KEYUP
, por exemplo, você poderá acessar evento.key
para descobrir qual tecla foi solta.
Exercício 2
Resposta
Como vimos na tabela no texto acima, todo evento do tipo pygame.KEYDOWN
possui um atributo key
contendo a tecla pressionada. A documentação mostra uma grande tabela com todas as teclas disponíveis como constantes começando com K_
. Assim como os eventos, elas estão disponíveis como atributos de pygame
.
Finalmente, precisamos checar se evento.key
é igual à constante pygame.K_LEFT
.
Vamos fazer uma breve pausa para reflexão.