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

Résolu/Fermé
Enz0lanterne828 Messages postés 50 Date d'inscription mercredi 8 janvier 2020 Statut Membre Dernière intervention 21 mars 2020 - Modifié le 28 févr. 2020 à 18:06
Enz0lanterne828 Messages postés 50 Date d'inscription mercredi 8 janvier 2020 Statut Membre Dernière intervention 21 mars 2020 - 28 févr. 2020 à 19:51
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 421 Date d'inscription vendredi 25 septembre 2015 Statut Membre Dernière intervention 1 mars 2024 344
28 févr. 2020 à 19:08
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 mercredi 8 janvier 2020 Statut Membre Dernière intervention 21 mars 2020 8
28 févr. 2020 à 19:13
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 421 Date d'inscription vendredi 25 septembre 2015 Statut Membre Dernière intervention 1 mars 2024 344
28 févr. 2020 à 19:19
À aucun endroit vous ne créez une variable qui s'appelle boutons.
0
Enz0lanterne828 Messages postés 50 Date d'inscription mercredi 8 janvier 2020 Statut Membre Dernière intervention 21 mars 2020 8
Modifié le 28 févr. 2020 à 19:29
"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 421 Date d'inscription vendredi 25 septembre 2015 Statut Membre Dernière intervention 1 mars 2024 344
28 févr. 2020 à 19:35
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 mercredi 8 janvier 2020 Statut Membre Dernière intervention 21 mars 2020 8
28 févr. 2020 à 19:36
Y a-t-il un moyen de créer plusieurs événements ?
0
quent217 Messages postés 421 Date d'inscription vendredi 25 septembre 2015 Statut Membre Dernière intervention 1 mars 2024 344
28 févr. 2020 à 19:50
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 mercredi 8 janvier 2020 Statut Membre Dernière intervention 21 mars 2020 8
28 févr. 2020 à 19:51
Ha oui merci :-)
0