Partage
  • Partager sur Facebook
  • Partager sur Twitter

Détéction du clic gauche

Sujet résolu
    14 septembre 2017 à 16:53:00

    Bonjour, dans la poursuite de mon apprentissage python, je développe un mini-jeu. Dans ce dernier j'ai besoin que l'utilisateur clique sur une image (clé) afin que celle ci disparaisse (elle ira dans un inventaire). Pour ce faire, j'ai créer une classe Controls afin de me facilité la tache. Cependant, quand je clique sur la clé elle ne disparait pas. 

    je vous donne d'abord la classe Controls

    import pygame
    from pygame.locals import *
    
    class Controls:
        def __init__(self):
            """initialisation"""
            self.pressed = 0
    
        def mouse_leftclic(self):
            for event in pygame.event.get():
                self.pressed = pygame.mouse.get_pressed()
                
                if self.pressed[0]:
                    print('clic')
                    return True
                else:
                    return False
    
        def mouse_pos(self):
            for event in pygame.event.get():
                if pygame.mouse.get_focused():
                   return pygame.mouse.get_pos()
    


    puis le fichier principal où j'ai démarré le projet :

    import pygame, time
    from pygame.locals import *
    from ScreenTitleClass import *
    from MessagesClass import *
    from ControlsClass import *
    from ColliderClass import *
    
    from constants import *
    
    #Dialogues et texte afficher à l'écran
    from Messages import *
    
    # On initialise Pygame
    pygame.init()
    
    # On fixe l'horloge pour gérer les fps
    clock = pygame.time.Clock()
    
    # On créer la fenêtre de jeu principal
    window = pygame.display.set_mode((WINDOW_W,WINDOW_H))
    pygame.display.set_caption(TITLE)
    
    # On affiche le nombre de fps
    pygame.font.init()
                                         
    # On permet la répition d'une action lorsque la touche donnée reste appuyer
    pygame.key.set_repeat(200, 100)
    game = ScreenTitle(window)
    fps = pygame.time.Clock()
    
    #On créer les variables nécessaire au jeu
    controls = Controls()# On créer la variable controls qui contient le contenu de la classe ControlsClass
    msg = Messages() # Variable de messages
    collider = Collider() # Gestion des collisions
    
    closeDial = False
    item = False
    
    rootGame = True
    # Boucle principal de l'application. Tant qu'elle reste ouverte, le jeu ne se ferme pas
    while rootGame:
        screenTitle = True
        # Boucle de l'ecran titre, tant que cette boucle est ouverte, le jeu affiche l'écran titre.
        while screenTitle:
            if game.load() == False:
                screenTitle = False
            pygame.display.flip()
    
        game = True
        # Boucle du jeu. Tant que la boucle reste ouverte, le jeu est lancer. si elle se ferme, alors on quitte la boucle et reviens à la boucle principale.
        while game:
            pygame.display.set_caption('FPS: ' + str(clock.get_fps()))
            for event in pygame.event.get():
                if event.type == QUIT:
                    game = False
            
            #---------------------------------------------------
            #
            #       PREMIERE MAP
            #
            #---------------------------------------------------
            
            map01 = pygame.image.load('maps/01.bmp').convert()
            window.blit(map01, (0,0))
            
            # On vérifie que l'on a bien fais un clic gauche
            if item:
                key = pygame.image.load('ressources/key01.png').convert_alpha()
                keypos = key.get_rect()
                keypos.center = 520,520
                window.blit(key, keypos)
    
                if collider.detect(keypos):
                    print('on touche la clé !')
                    if controls.mouse_leftclic():
                        print('la clé disparait')
                  
            else:
                if closeDial == False:
                    msg.message("""Le but est simple petit padawan... T'échapper de la tour infernal.""", window)
                else:
                    item = True
            
                if controls.mouse_leftclic():
                    closeDial = True
                                
            pygame.display.flip()
            #clock.tick(60)
    
    


    je précise que la collision fonctionne et que la clé est bien détecter (la classe Collider au besoin)

    import pygame
    from pygame.locals import *
    
    class Collider:
        def __init__(self):
            """initialisation"""
    
        def detect(self,object_rect):
            """On va chercher à savoir si une collision se fait entre l'objet et la souris"""
            for event in pygame.event.get():
                if pygame.mouse.get_focused():
                    x,y = pygame.mouse.get_pos()
                    collide = object_rect.collidepoint(x,y)
                    if collide:
                        return True
                    else:
                        return False
            
    

    -
    Edité par MrToine63 14 septembre 2017 à 16:56:27

    • Partager sur Facebook
    • Partager sur Twitter
    Nooooooooooooooooooooooooooooooooooooooooon !!
      14 septembre 2017 à 23:21:07

      for event in pygame.event.get(): if event.type == MOUSEBUTTONDOWN and event.button == 2: fais moi x instruction.
      • Partager sur Facebook
      • Partager sur Twitter
        15 septembre 2017 à 10:13:38

        Je n'ai pas compris ta réponse. Cependant, j'ai régler mon problème (j'imbriquer les for ce qui faisait foirer le script)
        • Partager sur Facebook
        • Partager sur Twitter
        Nooooooooooooooooooooooooooooooooooooooooon !!
          15 septembre 2017 à 13:30:57

          En fait je pense que tu n'as plus globalement pas compris le fonctionnement des évenement pygame:

          quand tu fais for event in pygame.event.get() tu parcours une liste qui contient des objets évenement. Ces objet possèdent un attribut type et d'autre attribut en fonction du type:

          for event in pygame.event.get()
              if event.type == MOUSEBUTTONDOWN: #récupération des évenements lié à un clic de souris
                  if event.button == 1: # parmis ceux précédent je prend le clic gauche
                  elif event.button == 2: # parmis ceux précédent je prend le clic droit
          

          et ainsi de suite pour chaque type d'event je te conseille de faire le tuto de ce même site sur pygame ;)

          • Partager sur Facebook
          • Partager sur Twitter

          Détéction du clic gauche

          × 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