Problème Pygame 3 touche en même temps
RésoluFlayme -
Bonjour,
Je suis entrain de créer un jeu vidéo mais je ne comprend pas pourquoi quand j'appuye sur la touche haut,gauche et espace (quand j'appuye sur haut,droite et espace le programme tir) le programme n'essaye même pas de tirer.
Voici mon code:
import os os.environ['PYGAME_HIDE_SUPPORT_PROMPT'] = "hide" import pygame LARGEUR = 1300 HAUTEUR = 700 TAILLE = 60 VITESSE = 10 TIREVIT = 30 FPS = 60 play = 1 action = [] x = LARGEUR//2 y = HAUTEUR//2 dir = 0 haut = False bas = False droite = False gauche = False tir = False def avhaut(): global y if y > 0: y -= VITESSE def avbas(): global y if y < HAUTEUR-TAILLE: y += VITESSE def avdroite(): global x if x < LARGEUR-TAILLE: x += VITESSE def avgauche(): global x if x > 0: x -= VITESSE def tirer(): action.append(["tir",dir,x,y]) pygame.init() pygame.display.set_caption('LE CARRÉ') ecran = pygame.display.set_mode((LARGEUR,HAUTEUR)) clock = pygame.time.Clock() while play: for event in pygame.event.get(): if event.type == pygame.QUIT: play = 0 if event.type == pygame.KEYDOWN: if event.key == pygame.K_UP: haut = True print('haut') if event.key == pygame.K_DOWN: bas = True print('bas') if event.key == pygame.K_RIGHT: droite = True print('droite') if event.key == pygame.K_LEFT: gauche = True print('gauche') if pygame.key.get_pressed()[pygame.K_DOWN]: tir = True print('tir') if event.type == pygame.KEYUP: if event.key == pygame.K_UP: haut = False if event.key == pygame.K_DOWN: bas = False if event.key == pygame.K_RIGHT: droite = False if event.key == pygame.K_LEFT: gauche = False if event.key == pygame.K_SPACE: tir = False if (haut and bas) or not (haut or bas): if not (droite and gauche): if droite: dir = 0 if gauche: dir = 4 elif (droite and gauche) or not (droite or gauche): if not (haut and bas): if haut: dir = 2 if bas: dir = 6 else: if haut: if droite: dir = 1 if gauche: dir = 3 if bas: if droite: dir = 7 if gauche: dir = 5 if haut: avhaut() if bas: avbas() if droite: avdroite() if gauche: avgauche() if tir: tirer() #print(dir) clock.tick(FPS) ecran.fill((0, 0, 0)) pygame.draw.rect(ecran, (255, 255, 255), pygame.Rect(x, y, TAILLE, TAILLE)) for act in action: # 321 # 4X0 # 567 if act[0]=='tir': pygame.draw.rect(ecran, (255, 0, 0), pygame.Rect(act[2], act[3], TAILLE//3, TAILLE//3)) if act[1] == 0: act[2] = act[2] + TIREVIT try: if act[1] == 1: act[3] = act[3] - TIREVIT//2 act[2] = act[2] + TIREVIT//2 except: pass try: if act[1] == 2: act[3] = act[3] - TIREVIT except NameError: pass try: if act[1] == 3: act[3] = act[3] + TIREVIT//2 act[2] = act[2] - TIREVIT//2 except: pass try: if act[1] == 4: act[2] = act[2] - TIREVIT except NameError: pass try: if act[1] == 6: act[3] = act[3] + TIREVIT except NameError: pass pygame.display.flip() pygame.quit() quit()
merci pour votre aide
- Get_pressed pygame
- Modulenotfounderror: no module named 'pygame' ✓ - Forum Python
- Pygame importer une police d'écriture ✓ - Forum Python
3 réponses
bonjour,
comme tu peux le voir, ton programme n'est pas correctement partagé. Peux-tu adapter cela?
Bonsoir, il semblerait que (bug de la sdl ?) up + left + space ne fonctionnent pas, le space n'est pas ajouté dans la liste d'events si les touches up et left sont pressées.
Un simple test avec le fichier pour tester les événements permet de s'en rendre compte.
from pygame.examples import eventlist eventlist.main()
Solution : utiliser une autre touche, le Ctrl gauche (K_LCTRL) est adapté, pour ma part je préfère cette touche à la barre d'espace =)