Problème avec les événement personalisés PyGame

Résolu
Enz0lanterne828 Messages postés 50 Statut Membre -  
Enz0lanterne828 Messages postés 50 Statut Membre -
Bonjour,

J'ai 12 ans et je code en python, en ce moment j'utilise le module PyGame.
J'ai un problème avec la commande
pygame.time.set_timer
.
Lorsque je créer 1 événement tout va bien:
QUIT_GAME = pygame.USERVENT
         elif event.type == pygame.MOUSEBUTTONUP:

            if boutons.bouton_quiter.rect.collidepoint(event.pos) and menu:
                boutons.bouton_quiter.image = boutons.bouton_quiter.image_clique
                pygame.time.set_timer(boutons.QUIT_GAME, 10)

        elif event.type == boutons.QUIT_GAME:
            pygame.time.set_timer(boutons.QUIT_GAME, 0)
            quit()


Mais lorsque je rajoute 1 événement ou plus il y a un problème:
BRUIT = pygame.USERVENT
SETTINGS = pygame.USEREVNT
QUIT_GAME = pygame.USERVENT
        elif event.type == pygame.MOUSEBUTTONUP:

            if boutons.bouton_quiter.rect.collidepoint(event.pos) and menu:
                boutons.bouton_quiter.image = boutons.bouton_quiter.image_clique
                pygame.time.set_timer(boutons.QUIT_GAME, 10)

            if boutons.bouton_jouer.rect.collidepoint(event.pos) and menu:
                boutons.bouton_jouer.image = boutons.bouton_jouer.image_brule
                boutons.bouton_jouer.rect = boutons.bouton_jouer.new_rect
                feu.set_volume(1.8)
                feu.play()
                pygame.time.set_timer(boutons.BRUIT, 2700)

            if boutons.bouton_options.rect.collidepoint(event.pos) and menu:
                boutons.bouton_options.image = boutons.bouton_options.image_clique
                pygame.time.set_timer(boutons.SETTINGS, 10)

        elif event.type == boutons.SETTINGS:
            pygame.time.set_timer(boutons.SETTINGS, 0)
            menu = False
            option = True

        elif event.type == boutons.BRUIT:
            pygame.time.set_timer(boutons.BRUIT, 0)
            menu = False
            game = True

        elif event.type == boutons.QUIT_GAME:
            pygame.time.set_timer(boutons.QUIT_GAME, 0)
            quit()


Le problème est que peu importe sur quel bouton je clique le programme prend la première codition (ici qui est:
elif event.type == boutons.SETTINGS:
     ect...)

Donc si je clique sur le bouton quiter, le programme me mène vers le options et pareil pour le bouton jouer...

Auriez-vous une solution SVP ?
Merci d'avance.

5 réponses

  1. quent217 Messages postés 424 Statut Membre 348
     
    Bonjour,
    Comment avez-vous créé la variable boutons et ses attributs (boutons.BRUIT, boutons.SETTINGS, etc.) ?
    1
  2. Enz0lanterne828 Messages postés 50 Statut Membre 8
     
    Comme ceci:
    # Importer PyGame
    import pygame
    
    
    # Bouton jouer
    class BoutonJouer(pygame.sprite.Sprite):
    
        def __init__(self):
            super().__init__()
            self.image = pygame.image.load('jouer.png')
            self.image_brule = pygame.image.load('jouer_brule.png')
            self.rect = self.image.get_rect()
            self.new_rect = self.image_brule.get_rect()
            self.new_rect.x = 200
            self.new_rect.y = 163
            self.rect.x = 200
            self.rect.y = 320
    
    
    # Bouton quiter
    class Quiter(pygame.sprite.Sprite):
    
        def __init__(self):
            super().__init__()
            self.image = pygame.image.load('quiter.png')
            self.image_clique = pygame.image.load('quiter_clique.png')
            self.rect = self.image.get_rect()
            self.rect.x = 100
            self.rect.y = 670
    
    
    # Bouton options
    class Options(pygame.sprite.Sprite):
    
        def __init__(self):
            super().__init__()
            self.image = pygame.image.load('options.png')
            self.image_clique = pygame.image.load('options_clique.png')
            self.rect = self.image.get_rect()
            self.rect.x = 150
            self.rect.y = 500
    
    
    bouton_jouer = BoutonJouer()
    bouton_options = Options()
    bouton_quiter = Quiter()
    BRUIT = pygame.USEREVENT
    QUIT_GAME = pygame.USEREVENT
    SETTINGS = pygame.USEREVENT
    0
    1. quent217 Messages postés 424 Statut Membre 348
       
      À aucun endroit vous ne créez une variable qui s'appelle boutons.
      0
  3. Enz0lanterne828 Messages postés 50 Statut Membre 8
     
    "boutons" c'est le nom du scripte python et pas une variable, le code que je vous ai donné et stocké à l’intérieur et pour le reste du code tout est dans un autre scripte nommer "main".

    Donc lorsque je prend une variable venant du scripte "main" je dois mettre "boutons." avant pour dire que la variable viens du scripte "boutons"
    0
    1. quent217 Messages postés 424 Statut Membre 348
       
      Ah d'accord je comprend.
      Dans ce cas toutes les valeurs BRUIT, QUIT_GAME, SETTINGS ont la même valeur pygame.USEREVENT donc c'est logique que ce soit toujours la première condition qui soit prise en compte. Soient toutes les conditions sont vraies, soit elles sont toutes fausses.
      0
  4. Enz0lanterne828 Messages postés 50 Statut Membre 8
     
    Y a-t-il un moyen de créer plusieurs événements ?
    0
    1. quent217 Messages postés 424 Statut Membre 348
       
      Oui en mettant des valeurs différentes :
      BRUIT = pygame.USEREVENT + 1
      QUIT_GAME = pygame.USEREVENT + 2
      SETTINGS = pygame.USEREVENT + 3
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Enz0lanterne828 Messages postés 50 Statut Membre 8
     
    Ha oui merci :-)
    0