#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import pygame
from pygame.locals import *
pygame.init()
fenetre = pygame.display.set_mode((200, 200))
clock = pygame.time.Clock()
continuer = True
while continuer:
clock.tick(30)
for event in pygame.event.get():
if event.type == QUIT:
continuer = False
k = pygame.key.get_pressed()
if k[K_t]:
print("Yup!")
Mais tu verras que si tu mets en commentaire la ligne clock.tick(30), ça prend une plombe pour voir les prints. Pourquoi ? Et bien parce que sans cette ligne, la boucle while tourne aussi vite qu'elle peut, prenant donc énormément des resources systèmes. Le temps que ton doigt enfonce la touche t, le programme a le temps de faire au moins 10 tours de boucles. Et pour chaque passage, il doit faire un print, qui prend aussi pas mal de temps machine. Cependant tout le temps est déjà accaparé par ta boucle while, et donc Python met un certain temps à t'afficher le print.
Avec le timer, tu réduis la cadence de la boucle, et le CPU est plus à l'aise. Pour t'en convaincre, ouvre le gestionnaire de tâches et regarde l'utilisation du CPU avec et sans le timer.
Dans tous les cas, si tu ne veux réagir qu'une fois à l'appui ou le relâchement de la touche, tu dois plutôt procéder avec la lecture des événements, comme ceci:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import pygame
from pygame.locals import *
pygame.init()
fenetre = pygame.display.set_mode((200, 200))
clock = pygame.time.Clock()
continuer = True
while continuer:
clock.tick(30)
for event in pygame.event.get():
if event.type == QUIT:
continuer = False
elif event.type == KEYUP and event.key == K_t:
print("Une seule fois quand la touche est relâchée.")
Essaie de remplacer KEYUP par KEYDOWN pour voir la différence de comportement.
Résumé : tu peux utiliser key.get_pressed() si lors du tour de boucle, tu es intéressé de savoir si la touche est toujours enfoncée. Tu utiliseras la méthode ci-dessus lorsque tu veux déclencher une action lors de l'appuie / relâchement d'une touche. Imagine qu'avec la touche P tu veux mettre le jeu en pause. La méthode get_pressed() serait désastreuse, car le jeu ferait des pause - resume trop rapidement pour le joueur.
Merci Dan737 En bidouillant un petit le code que tu m'a fourni, je me suis rendu compte qu'en fait le get_pressed() ne fonctionne que si l'on a un event.get() au dessus, source de mon problème
Quand à l'utilisation des touches, je connais bien leur différence d'utilisation, en l'occurence là c'est pour gérer un jeu deux joueurs avec des déplacements constants donc indispensable
Merci beaucoup, bonne continuation !
Si debugger, c’est supprimer des bugs, alors programmer ne peut être que les ajouter.
Gérer deux touches en même temps - Pygame
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Si debugger, c’est supprimer des bugs, alors programmer ne peut être que les ajouter.
Si debugger, c’est supprimer des bugs, alors programmer ne peut être que les ajouter.