Problème avec les événement personalisés PyGame [Résolu]

Signaler
Messages postés
50
Date d'inscription
mercredi 8 janvier 2020
Statut
Membre
Dernière intervention
21 mars 2020
-
Messages postés
50
Date d'inscription
mercredi 8 janvier 2020
Statut
Membre
Dernière intervention
21 mars 2020
-
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

Messages postés
374
Date d'inscription
vendredi 25 septembre 2015
Statut
Membre
Dernière intervention
6 mars 2020
168
Bonjour,
Comment avez-vous créé la variable boutons et ses attributs (boutons.BRUIT, boutons.SETTINGS, etc.) ?
Messages postés
50
Date d'inscription
mercredi 8 janvier 2020
Statut
Membre
Dernière intervention
21 mars 2020
4
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
Messages postés
374
Date d'inscription
vendredi 25 septembre 2015
Statut
Membre
Dernière intervention
6 mars 2020
168
À aucun endroit vous ne créez une variable qui s'appelle boutons.
Messages postés
50
Date d'inscription
mercredi 8 janvier 2020
Statut
Membre
Dernière intervention
21 mars 2020
4
"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"
Messages postés
374
Date d'inscription
vendredi 25 septembre 2015
Statut
Membre
Dernière intervention
6 mars 2020
168
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.
Messages postés
50
Date d'inscription
mercredi 8 janvier 2020
Statut
Membre
Dernière intervention
21 mars 2020
4
Y a-t-il un moyen de créer plusieurs événements ?
Messages postés
374
Date d'inscription
vendredi 25 septembre 2015
Statut
Membre
Dernière intervention
6 mars 2020
168
Oui en mettant des valeurs différentes :
BRUIT = pygame.USEREVENT + 1
QUIT_GAME = pygame.USEREVENT + 2
SETTINGS = pygame.USEREVENT + 3
Messages postés
50
Date d'inscription
mercredi 8 janvier 2020
Statut
Membre
Dernière intervention
21 mars 2020
4
Ha oui merci :-)