Bonjour, j'ai commencer un jeu en pygame: il s'agit d'un personnage qui saute sur des platformes, mais j'ai un soucis lorsqu'on arrive à la gestion des sauts. Mon personnage se déplace correctement sur la droite, la gauche, redescend avec une gravité, tient sur les platformes, etc...

Voici mon problème: Lorsque j'appuie sur la flèche du haut (K_UP), mon personnage saute correctement et redescend. Mais lorsque je reste appuyer sur la flèche de droite (K_RIGHT) ou de gauche (K_LEFT) PUIS j'appuie sur la flèche du haut, mon personnage saute, mais lorsque le personnage arrête de monter, il redescend VERTICALEMENT malgrés que j'appuie toujours sur la flèche de droite ou de gauche; je suis obligé de relâcher la flèche de droite ou de gauche et rappuyer pour avancer. Ce que je souhaite c'est que mon personnage continue d'avancer à gauche ou droite à ma guise en laissant appuyer sur la touche. Je veux pouvoir modifier la direction de mon personnage (droite-gauche) MÊME dans les airs.

Voici un petit gif de la fenêtre pygame (je modifierais les graphismes lorsque j'aurais résolu ce problème):
Nom : pika saut.gif
Affichages : 2139
Taille : 193,7 Ko
Sur le gif, le problème vient lors de la retombé du personnage. Je voudrais qu'il continue sur la droite lorsque le saut est fini (sachant que j'appuie sur la flèche de droite tout le long du saut)

Voici maintenant les parties du code en rapport avec le saut:

Tout d'abord la gestion des événements (toutes informations est écrit en commentaire):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#gestion des événements
      for event in pygame.event.get():
          if event.type==QUIT:
              continuer=0
          elif event.type==KEYDOWN:   #appui sur une touche
              if collision==True:     #si il ya collision (à ignorer)
                  numero=numero+1     # Lors de chaque appui on augmente (il s'agit des 4 images animant la course du pikachu) (à ignorer)
              if numero==4:     # mais si c'est 4 ... (à ignorer)
                  numero=0      # ... on revient à 0 (à ignorer)
              tkey=pygame.key.get_pressed()       #on enregistre la touche tapé dans la variable
              if tkey[K_UP] and saut==0 and collision==True:      #si on appuie sur la flèche du haut ET que on est pas déjà en saut ET que on touche le sol
                  saut=10     #permet d'entrer dans la condition "si" (voir code suivant)
                  collision=False     #on est en l'air, donc on ne touche plus la plateforme
                  numero=2    #3eme image du pikachu, lors du saut l'image restera figé dessus pour plus de réalisme (à ignorer)
              elif tkey[K_LEFT]:  #si on appuie sur la flèche de gauche
                  x-=10   #on se déplace de 10 pixels vers la gauche
                  direction="gauche"  #le personnage se tourne vers la gauche (à ignorer)
              elif tkey[K_RIGHT]:     #si on appuie sur la flèche de droite
                  x+=10   #on se déplace de 10 pixels vers la droite
                  direction="droite"      #le personnage se tourne vers la droite (à ignorer)
A noté que les variables "x" et "y" correspondent aux coordonnées du personnage.

Ensuite, je vous montre la condition "si" lors d'un saut, cette condition se fera donc 10 fois car on a initialiser saut à 10:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
        #gravité
        y+=10   #descente de 10 pixels à chaque passage dans la boucle "while"
 
        #saut
        if saut>=1:
            y-=20               #on monte de 20 pixels
            saut-=1             #la variable saut (initialisé à 10) diminue de 1 à chaque passage dans la condition "si"
            collision==False    #ya plus de collision car on est en l'air
            if tkey[K_LEFT]:    #si on a appuyer sur la flèche de droite avant le saut
                x-=7            #on va vers la gauche de 7 pixels à chaque passage dans la condition "si"
            if tkey[K_RIGHT]:   #idem mais vers la droite
                x+=7
Et enfin, voici la gestion des collisions:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
        #collision     
        if rect_perso.colliderect(rect_passage_haut) or rect_perso.colliderect(rect_passage_bas):   #si on touche la platforme
            y=y-10      #le personnage monte de 10 pixel (pour annuler la gravité)
            collision=True      #la collision est présente
Voilà, j'espère que vous avez compris mon problème et que vous ayez l'aimabilitée de m'aider :/
Pour information, j'ai déjà regarder beaucoup de tutoriels et de problèmes résolu mais: soit ça n'avais rien à voir avec ma situation, soit je n'ai rien compris.
N'hésitez pas à me donner ne serait qu'une petite piste, ce sera toujours bienvenue !

EDIT: J'ai oublier de dire que le tout était compris dans une boucle infini while avec une vitesse comme ceci:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
    while continuer:
        clock.tick(30)