Partage
  • Partager sur Facebook
  • Partager sur Twitter

Probleme de clique

    9 avril 2024 à 15:41:14

    Bonjour, j'aimerais dans le but d'un projet crée un menu. Or pour cela je dois détecter lorsque l'utilisateur clique sur sa souris mais après avoir lu la documentation de pygame et mouse je ne trouve pas comment faire pour détecter clique par clique mais j'ai trouvé seulement comme détecter si le clique est enfoncé voici ma fonction qui me permet d'afficher les images et savoir si elles sont pressés : 

    def draw_button(surface, button_image, button_rect):
    
        action = False
    
        # Obtenir la position de la souris
    
        pos = pygame.mouse.get_pos()
    
        # Vérifier si la souris est pressée
    
        if button_rect.collidepoint(pos):
    
            if pygame.mouse.get_pressed()[0] == 1:
    
                action = True
    
        # Afficher le bouton sur l'écran
    
        surface.blit(button_image, (button_rect.x, button_rect.y))
    
        return action

    Peut-être faudrait il utiliser MOUSEBUTTONUP et DOWN mais honnêtement j'aurais besoin qu'on m'éclaire

    J'aurais besoin que ça prenne en compte clique par clique pour que lorsque j'appuie sur mon bouton volume on l'image soit remplacé par volume off. Pour ce côté ci dans ma fonction menu ça fonctionne mais j'aurais juste besoin que le clique ne doit pas être enfoncé car sinon ça me renvoie divers information booléenne et change mon image sans cesse, voici ma fonction menu pour d'autres conseils si vous avez : 

    # Fonction menu
    def menu():
        SCREEN_HEIGHT = 500
        SCREEN_WIDTH = 800
        screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
    
        start_img = pygame.image.load('assets/menu/start_btn.png').convert_alpha()
        exit_img = pygame.image.load('assets/menu/exit_btn.png').convert_alpha()
        option_img = pygame.image.load('assets/menu/option.png').convert_alpha()
        sound_on_img = pygame.image.load('assets/menu/sound_on.png').convert_alpha()
        sound_off_img = pygame.image.load('assets/menu/sound_off.png').convert_alpha()
    
        start_button_image, start_button_rect = create_button(100, 200, start_img, 0.8)
        exit_button_image, exit_button_rect = create_button(450, 200, exit_img, 0.8)
        option_button_image, option_button_rect = create_button(730, 0, option_img, 0.2)
        sound_button_image, sound_button_rect = create_button(12,10,sound_on_img,0.09)
    
        sound = True
        run = True
        while run:
            screen.fill((132,214,126))
            draw_button(screen, option_button_image, option_button_rect)
    
            if draw_button(screen, sound_button_image, sound_button_rect):
                if sound:
                    sound_button_image, sound_button_rect = create_button(12,10,sound_off_img,0.09)
                    sound = False
    
                else:
                    sound_button_image, sound_button_rect = create_button(12,10,sound_on_img,0.09)
                    sound = True
    
    
    
            if draw_button(screen, start_button_image, start_button_rect):
                main()
            if draw_button(screen, exit_button_image, exit_button_rect):
                run = False
    
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    run = False
    
    
            pygame.display.update()
    
        pygame.quit()
    




    -
    Edité par Zerko/Milan 9 avril 2024 à 15:45:40

    • Partager sur Facebook
    • Partager sur Twitter
      9 avril 2024 à 16:36:20

      tu as une boucle de gestion des événements qui débute en ligne 40, c'est dans celle-ci que tu dois détecté si tu as cliqué et ensuite regarder où le clic a été fait

      for event in pygame.event.get():
          if event.type == pygame.MOUSEBUTTONDOWN:           
              if sound_button_rect.collidepoint(pygame.mouse.get_pos()):
                  sound= not sound
          if event.type == pygame.QUIT:
              run= false
      
      if sound:
          # affichage bouton son ON
          sound_button_image, sound_button_rect = create_button(12,10,sound_on_img,0.09)
      else:
          #affichage bouton son OFF
          sound_button_image, sound_button_rect = create_button(12,10,sound_off_img,0.09)
      



      -
      Edité par umfred 9 avril 2024 à 16:36:40

      • Partager sur Facebook
      • Partager sur Twitter
        9 avril 2024 à 18:41:58

        umfred a écrit:

        tu as une boucle de gestion des événements qui débute en ligne 40, c'est dans celle-ci que tu dois détecté si tu as cliqué et ensuite regarder où le clic a été fait

        for event in pygame.event.get():
            if event.type == pygame.MOUSEBUTTONDOWN:           
                if sound_button_rect.collidepoint(pygame.mouse.get_pos()):
                    sound= not sound
            if event.type == pygame.QUIT:
                run= false
        
        if sound:
            # affichage bouton son ON
            sound_button_image, sound_button_rect = create_button(12,10,sound_on_img,0.09)
        else:
            #affichage bouton son OFF
            sound_button_image, sound_button_rect = create_button(12,10,sound_off_img,0.09)
        



        Merci pour ta réponse, mais le problème n'est pas là malheureusement, si je mets dans les evenements ou non ça fonctionne tout de même. Je cherche seulement comment faire pour que se soit pris en compte clique par clique et non que se soit si mon clique est enfoncé qui est pris en compte, je sais pas si je suis assez claire mais ducoups ça serait cette partie de mon programme que j'aimerais modifier :

        if pygame.mouse.get_pressed()[0] == 1:
         
                    action = True





        • Partager sur Facebook
        • Partager sur Twitter
          9 avril 2024 à 19:17:52

          Faut mémoriser l'état précédent du bouton . Un clic c'est un changement d'état . Bon ça c'est si on utilise get_pressed...

          Le mieux c'est d'utiliser les évènements .

          -
          Edité par josmiley 9 avril 2024 à 19:28:42

          • Partager sur Facebook
          • Partager sur Twitter

          Python c'est bon, mangez-en. 

            9 avril 2024 à 19:32:15

            il faut changer l'événement pris en compte, ce serait plutôt en effet pygame.MOUSEBUTTONUP qui se produit au relâchement du clic (on pourrait rajouter un "AND event.button==BUTTON_LEFT" au test pour le clic gauche).

            • Partager sur Facebook
            • Partager sur Twitter
              9 avril 2024 à 20:03:03

              Je vois merci pour vos réponses je vais essayer d'arranger ça
              • Partager sur Facebook
              • Partager sur Twitter

              Probleme de clique

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              • Editeur
              • Markdown