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.KEYDOWNe, 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.