OUJOOD.COM
Utilisation des touches fléchées (gauche, droite, haut, bas)
Pour utiliser les touches du clavier pour déplacer une image dans Pygame, vous pouvez ajouter une gestion des événements clavier à votre boucle principale. Voici comment vous pourriez le faire en modifiant votre code existant :
Exemple : 📋 Copier le code
import pygame
from pygame.locals import *
# Entrée des couleurs
JAUNE = (255, 255, 0)
BLEU = (0, 0, 255)
# Initialiser le jeu GUI
pygame.init()
# Définir les dimensions de l'interface graphique du jeu
largeur, hauteur = 640, 350
écran = pygame.display.set_mode((largeur, hauteur))
# Entrée de l'image
img = pygame.image.load('old-logo.png')
img.convert()
# Dessiner un rectangle autour de l'image
rect = img.get_rect()
rect.center = largeur // 2, hauteur // 2
# Définir les valeurs de fonctionnement et de déplacement
en_cours = True
en_mouvement = False
# Définir la vitesse de déplacement de l'image
vitesse = 5
# Définir ce qui se passe lorsque le jeu est en cours d'exécution
while en_cours:
for event in pygame.event.get():
if event.type == QUIT:
en_cours = False
elif event.type == MOUSEBUTTONDOWN:
if rect.collidepoint(event.pos):
en_mouvement = True
elif event.type == MOUSEBUTTONUP:
en_mouvement = False
elif event.type == MOUSEMOTION and en_mouvement:
rect.move_ip(event.rel)
# Gestion des événements clavier
elif event.type == KEYDOWN:
if event.key == K_LEFT:
rect.move_ip(-vitesse, 0)
elif event.key == K_RIGHT:
rect.move_ip(vitesse, 0)
elif event.key == K_UP:
rect.move_ip(0, -vitesse)
elif event.key == K_DOWN:
rect.move_ip(0, vitesse)
# Définir la couleur de l'écran et afficher l'image sur l'écran
écran.fill(JAUNE)
écran.blit(img, rect)
# Construire la bordure autour de l'image
pygame.draw.rect(écran, BLEU, rect, 2)
# Mettre à jour l'interface graphique pygame
pygame.display.update()
# Quitter le jeu GUI
pygame.quit()
Dans ce code, j'ai repris le code du chapitre précédent et j'ai ajouté une section pour gérer les événements clavier (`KEYDOWN`). Les touches fléchées (gauche, droite, haut, bas) sont utilisées pour déplacer l'image dans la direction correspondante. Vous pouvez ajuster la vitesse de déplacement en modifiant la valeur de la variable `vitesse`.
Voici une autre version du code précédent, il s'agit de modifier le code de manière à ce que l'image continue de bouger tant que la touche fléchée est enfoncée et s'arrête lorsque la touche est relâchée, vous pouvez utiliser un dictionnaire pour suivre l'état actuel des touches du clavier. Voici le code modifié :
Exemple : 📋 Copier le code
import pygame
from pygame.locals import *
# Entrée des couleurs
JAUNE = (255, 255, 0)
BLEU = (0, 0, 255)
# Initialiser le jeu GUI
pygame.init()
# Définir les dimensions de l'interface graphique du jeu
largeur, hauteur = 640, 350
écran = pygame.display.set_mode((largeur, hauteur))
# Entrée de l'image
img = pygame.image.load('old-logo.png')
img.convert()
# Dessiner un rectangle autour de l'image
rect = img.get_rect()
rect.center = largeur // 2, hauteur // 2
# Définir les valeurs de fonctionnement et de déplacement
en_cours = True
en_mouvement = False
# Définir la vitesse de déplacement de l'image
vitesse = 1
# Dictionnaire pour suivre l'état des touches du clavier
touches = {K_LEFT: False, K_RIGHT: False, K_UP: False, K_DOWN: False}
# Définir ce qui se passe lorsque le jeu est en cours d'exécution
while en_cours:
for event in pygame.event.get():
if event.type == QUIT:
en_cours = False
elif event.type == MOUSEBUTTONDOWN:
if rect.collidepoint(event.pos):
en_mouvement = True
elif event.type == MOUSEBUTTONUP:
en_mouvement = False
elif event.type == MOUSEMOTION and en_mouvement:
rect.move_ip(event.rel)
# Gestion des événements clavier
elif event.type == KEYDOWN:
if event.key in touches:
touches[event.key] = True
elif event.type == KEYUP:
if event.key in touches:
touches[event.key] = False
# Déplacer l'image en fonction des touches enfoncées
if touches[K_LEFT] and rect.left > 0:
rect.move_ip(-vitesse, 0)
if touches[K_RIGHT] and rect.right < largeur:
rect.move_ip(vitesse, 0)
if touches[K_UP] and rect.top > 0:
rect.move_ip(0, -vitesse)
if touches[K_DOWN] and rect.bottom < hauteur:
rect.move_ip(0, vitesse)
# Définir la couleur de l'écran et afficher l'image sur l'écran
écran.fill(JAUNE)
écran.blit(img, rect)
# Construire la bordure autour de l'image
pygame.draw.rect(écran, BLEU, rect, 1)
# Mettre à jour l'interface graphique pygame
pygame.display.update()
# Quitter le jeu GUI
pygame.quit()
Dans ce code, le dictionnaire touches est utilisé pour suivre l'état des touches du clavier. Lorsque la touche est enfoncée, la valeur correspondante dans le dictionnaire est définie sur True, et lorsque la touche est relâchée, la valeur est définie sur False. Ensuite, le déplacement de l'image est effectué en fonction de l'état actuel de ces touches.
Pour ralentir le mouvement de l'image lorsque la touche est enfoncée, vous pouvez ajuster la vitesse de déplacement. Vous pouvez également utiliser la fonction pygame.time.Clock() pour contrôler la vitesse de la boucle principale du jeu.
Procéder comme suit :
1. definir la variable Clock en modifiant le code comme suit:
# Définir les valeurs de fonctionnement et de déplacement en_cours = True en_mouvement = False clock = pygame.time.Clock()
Puis ajouter l'horloge (clock) pour contrôler la vitesse dans la boucle principale du jeu après pygame.display.update() comme suit :
pygame.display.update()
# Contrôler la vitesse de la boucle principale
clock.tick(60) # Limiter à 60 images par seconde (FPS).
La fonction clock.tick(60) limite le jeu à 60 images par seconde, ce qui permet de contrôler la vitesse globale du mouvement.