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

Résolu
Enz0lanterne828 Messages postés 50 Date d'inscription   Statut Membre Dernière intervention   -  
Enz0lanterne828 Messages postés 50 Date d'inscription   Statut Membre Dernière intervention   -
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

quent217 Messages postés 420 Date d'inscription   Statut Membre Dernière intervention   347
 
Bonjour,
Comment avez-vous créé la variable boutons et ses attributs (boutons.BRUIT, boutons.SETTINGS, etc.) ?
1
Enz0lanterne828 Messages postés 50 Date d'inscription   Statut Membre Dernière intervention   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
quent217 Messages postés 420 Date d'inscription   Statut Membre Dernière intervention   347
 
À aucun endroit vous ne créez une variable qui s'appelle boutons.
0
Enz0lanterne828 Messages postés 50 Date d'inscription   Statut Membre Dernière intervention   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
quent217 Messages postés 420 Date d'inscription   Statut Membre Dernière intervention   347
 
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
Enz0lanterne828 Messages postés 50 Date d'inscription   Statut Membre Dernière intervention   8
 
Y a-t-il un moyen de créer plusieurs événements ?
0
quent217 Messages postés 420 Date d'inscription   Statut Membre Dernière intervention   347
 
Oui en mettant des valeurs différentes :
BRUIT = pygame.USEREVENT + 1
QUIT_GAME = pygame.USEREVENT + 2
SETTINGS = pygame.USEREVENT + 3
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Enz0lanterne828 Messages postés 50 Date d'inscription   Statut Membre Dernière intervention   8
 
Ha oui merci :-)
0