Partage
  • Partager sur Facebook
  • Partager sur Twitter

Gestion de pygame.mouse.get_pressed()

Sujet résolu
    20 mai 2015 à 11:24:15

    Bonjour,

    J'ai crée en utilisant la librairie pygame un formulaire constitué d'un afficheur et de deux boutons "plus" et "moins". Quand j'appuie sur le bouton "plus", le programme incrémente le nombre de l'afficheur. Et quand j'appuie sur le bouton "moins", cela fait le contraire. Le formulaire marche très bien seulement je souhaite que si l'on reste appuyé sur un bouton, on doit voir le nombre continuer à s’incrémenter (appuie sur le bouton plus) ou le contraire (appuie sur le bouton moins). Avec la méthode get_pressed() cela fonctionne mais il faut bouger la souris au dessus du bouton en même temps que l'on appuie sur le bouton gauche de la souris. De plus quand on fait ça, on n'a pas le temps de voir le nombre s'incrémenter ou se désincrémenter.

    Voici une tentative de code:

    if pygame.mouse.get_pressed() == (1,0,0) and VariableCurseurAuDessusDuRectangleBoutonPlus:
        FonctionIncrementerNombre()
    
    if pygame.mouse.get_pressed() == (1,0,0) and VariableCurseurAuDessusDuRectangleBoutonMoins:
        FonctionDesincrementerNombre()
    

    ==> Ma question est: comment faire pour voir le nombre s'incrémenter de 1 en 1 quand on reste appuyé sur le bouton gauche de la souris et sans la bouger au dessus du rectangle de la surface du bouton ?

    Merci d'avance pour vos réponses.:)

    • Partager sur Facebook
    • Partager sur Twitter
      20 mai 2015 à 14:37:05

      Ajoute un timer qui vérifie que tes actions ne se passent pas trop vite et ainsi qui ne fais rien si tu tu es trop long :
      debut = time()
      
      if (time() - debut) > 1:
       #Do some stuff
       debut = time()
      else:
       #Do nothing !

      N'oublie pas d'importer la librairie.
      Un tuto si besoin :)

      • Partager sur Facebook
      • Partager sur Twitter
      OpenClassrooms retire tellement d'aiguilles de nos pieds qu'on pourrait ne plus trouver le foin de notre botte :)
        20 mai 2015 à 17:00:19

        Merci pour ta réponse IQbrod :),

        Je viens de résoudre mon problème, j'avais placé mon code dans la mauvaise boucle :-°.

        Voici le mauvais code, dans mon cas:

        while 1:
            for event in pygame.event.get():
                if event.type == pygame.MOUSEBUTTONDOWN and VariableCurseurAuDessusDuRectangleBoutonPlus:
                    FonctionIncrementerNombre()
         
                if event.type == pygame.MOUSEBUTTONDOWN and VariableCurseurAuDessusDuRectangleBoutonMoins:
                    FonctionDesincrementerNombre()

        Et enfin le bon code, il suffit de sortir les boucles IF de la boucle FOR:

        while 1:
            for event in pygame.event.get():
                (Autres instructions)
        
            if event.type == pygame.MOUSEBUTTONDOWN and VariableCurseurAuDessusDuRectangleBoutonPlus:
                FonctionIncrementerNombre()
         
            if event.type == pygame.MOUSEBUTTONDOWN and VariableCurseurAuDessusDuRectangleBoutonMoins:
                FonctionDesincrementerNombre()

        Pourquoi ça ne marchait pas ?

        Si les boucles IF se trouvent à l'intérieur de la boucle FOR (event prend la valeur de chaque entrée de pygame.event.get()), les instructions à l'intérieur des boucles IF ne se réalisent qu'une seule fois. En effet, dans la boucle FOR l’événement pygame.MOUSEBUTTONDOWN n'est enclenché qu'une seul fois.

        Alors que si les boucles IF se trouvent à l'extérieur de la boucle FOR, c'est à dire dans la boucle WHILE, les instructions à l'intérieur des boucles IF se réalisent tant que les conditions des boucles IF sont respectées.

        -
        Edité par TittouP 20 mai 2015 à 17:04:05

        • Partager sur Facebook
        • Partager sur Twitter
          21 mai 2015 à 8:31:00

          Ce qui n'empeche pas l'utilisation d'un timer pour réguler le nombre d'actions par secondes / fraps :)
          Si tu sors tes conditions IF event reste à l'ancienne valeur et donc considère les conditions comme vraies ! Pas bête :p

          • Partager sur Facebook
          • Partager sur Twitter
          OpenClassrooms retire tellement d'aiguilles de nos pieds qu'on pourrait ne plus trouver le foin de notre botte :)
            21 mai 2015 à 21:42:11

            Effectivement, il faut quand même limiter le nombre d'actions par seconde. Pour cela, il faut faire:

            Horloge = pygame.time.Clock()
            
            while 1:
                #Limite le nombre d'actions à 50 par seconde
                #Il faut que cette commande soit à l'intérieur de la boucle
                Horloge.tick(50)

            Merci encore IQbrod pour tes réponses.:)

            • Partager sur Facebook
            • Partager sur Twitter

            Gestion de pygame.mouse.get_pressed()

            × 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.
            • Editeur
            • Markdown