Gérer les événements : les touches du clavier
Principe
Ce sont les événements de types pygame.KEYDOWN
et pygame.KEYUP
qui permettent d'intercepter l'utilisation des touches du clavier.
Il faut ensuite déterminer quelle touche a été enfoncée ou relâchée. Cela se fait avec les propriétés dict['unicode']
ou key
de l'objet event
:
- • La propriété
dict['unicode']
est plus adaptée pour tester les lettres (afin de s'affranchir du problème lié au clavier qwerty). Elle renvoie une chaine de caractère contenant la lettre correspondant à la touche. - • La propriété
key
est indispensable pour les touches spécifiques comme les flèches de direction. Elle renvoie un code correspondant à chaque touche. La liste complète de ces codes est disponible dans la documentation officielle : http://www.pygame.org/docs/ref/key.html.
Exemples
Affichage de la valeur des touches enfoncées
import pygame
fen = pygame.display.set_mode((800,600))
couleur_fond = (0, 0, 0)
x = 400
y = 300
fen.fill(couleur_fond)
continuer = True
while continuer :
for evenement in pygame.event.get():
if evenement.type == pygame.QUIT:
continuer = False
if evenement.type == pygame.KEYDOWN:
print("Le code généré est le suivant : ")
print(" - event.dict['unicode'] : " + event.dict['unicode'])
print(" - event.key : " + str(event.key))
print(" - pygame.key.name(event.key) : " + pygame.key.name(event.key))
pygame.display.quit()
Déplacement d'un rond à l'aide des touches du clavier
import pygame
fen = pygame.display.set_mode((800,600))
couleur_rond = (0, 255, 255)
couleur_fond = (0, 0, 0)
# coordonnées du rond
x = 400
y = 300
fen.fill(couleur_fond)
pygame.draw.circle(fen, couleur_rond, (x, y), 40)
pygame.display.flip()
continuer = True
while continuer :
for evenement in pygame.event.get():
if evenement.type == pygame.QUIT:
continuer = False
if evenement.type == pygame.KEYDOWN:
# calcul des nouvelles coordonnées du rond
if evenement.key == pygame.K_UP:
y = y-5
elif evenement.key == pygame.K_DOWN:
y = y + 5
elif evenement.key == pygame.K_LEFT:
x = x-5
elif evenement.key == pygame.K_RIGHT:
x = x + 5
# mise à jour de l'affichage
fen.fill(couleur_fond)
pygame.draw.circle(fen, couleur_rond, (x, y), 40)
pygame.display.flip()
pygame.display.quit()