Problème de variable
JulesBourillon
-
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Dans mon code j'aimerais que l'utilisateur puisse choisir le "skin" de son personnage. Pour cela, il devrait cliquer sur un des rectangles qui leur sont associés. Voici le code:
En cliquant sur un des rectangles, cela modifierai la valeur de la variable self.numero_Perso dans ma fonction choice_perso (qui est importé dans un autre fichier puis inséré dans la boucle While du jeu).
Ex : Si l'ulisateur veut le "skin" 4, il devra cliquer sur le rectangle 4 ce qui mettra la variable self.numero_Player a 4.
Néanmoins, lorsque ma fonction s'active je n'appuie pas tout le tant sur l'un des rectangle et dans ces cas là, la valeur de variable self.numero_Player se remet à sa valeur initiale dans __init__ soit 0. J'aimerais que lorsque j'appuie une seule fois sur l'un des rectangles, ma variable se modifie définitivement et ne change plus. Même en connaissant la base de mon problème, je n'arrive pas à trouver une solution c'est pour cela que je demande de l'aide.
J'espère que j'ai réussi à énoncer clairement mon problème
Merci d'avance.
Dans mon code j'aimerais que l'utilisateur puisse choisir le "skin" de son personnage. Pour cela, il devrait cliquer sur un des rectangles qui leur sont associés. Voici le code:
import pygame class Skin: def __init__(self): self.is_playing = False self.numero_Perso = 0 def choice_perso(self): if self.is_playing: for event in pygame.event.get(): if event.type == pygame.MOUSEBUTTONDOWN: print(event.pos) if event.button == 1: #Si je clique gauche if 704 < event.pos[0] < 788 and 500 < event.pos[1] < 600: #Rect 1 self.numero_Perso = 1 self.is_playing = True elif 858 < event.pos[0] < 927 and 500 < event.pos[1] < 600: #Rect 2 self.numero_Perso = 2 self.is_playing = True elif 994 < event.pos[0] < 1080 and 500 < event.pos[1] < 600: #Rect 3 self.numero_Perso = 3 self.is_playing = True elif 1142 < event.pos[0] < 1227 and 500 < event.pos[1] < 600: #Rect 4 self.numero_Perso = 4 self.is_playing = True elif 704 < event.pos[0] < 788 and 645 < event.pos[1] < 742: #Rect 5 self.numero_Perso = 5 self.is_playing = True elif 858 < event.pos[0] < 927 and 645 < event.pos[1] < 742: #Rect 6 self.numero_Perso = 6 self.is_playing = True elif 994 < event.pos[0] < 1080 and 645 < event.pos[1] < 742: #Rect 7 self.numero_Perso = 7 self.is_playing = True elif 1142 < event.pos[0] < 1227 and 645 < event.pos[1] < 742: #Rect 8 self.numero_Perso = 8 self.is_playing = True return self.numero_Perso def update(self): self.choice_perso() print(self.numero_Perso)
En cliquant sur un des rectangles, cela modifierai la valeur de la variable self.numero_Perso dans ma fonction choice_perso (qui est importé dans un autre fichier puis inséré dans la boucle While du jeu).
Ex : Si l'ulisateur veut le "skin" 4, il devra cliquer sur le rectangle 4 ce qui mettra la variable self.numero_Player a 4.
Néanmoins, lorsque ma fonction s'active je n'appuie pas tout le tant sur l'un des rectangle et dans ces cas là, la valeur de variable self.numero_Player se remet à sa valeur initiale dans __init__ soit 0. J'aimerais que lorsque j'appuie une seule fois sur l'un des rectangles, ma variable se modifie définitivement et ne change plus. Même en connaissant la base de mon problème, je n'arrive pas à trouver une solution c'est pour cela que je demande de l'aide.
J'espère que j'ai réussi à énoncer clairement mon problème
Merci d'avance.
A voir également:
- Problème de variable
- Impossible de créer le fichier de travail. vérifiez la variable d'environnement temp - Forum Microsoft Office
- Variable objet ou variable de bloc with non définie - Forum VB / VBA
- Vba range avec variable ✓ - Forum VB / VBA
- Vérifiez la variable d'environnement TEMP. QUE FAIRE ????? ✓ - Forum Microsoft Office
- Range avec une Variable ✓ - Forum VB / VBA
2 réponses
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
bonjour,
Si ce que tu décris est correct, cela signifie que tes objets Skin ne sont pas permanents.
Tu ne nous montres qu'une partie de ton code.
Si ce que tu décris est correct, cela signifie que tes objets Skin ne sont pas permanents.
Tu ne nous montres qu'une partie de ton code.
Bonjour,
return self.numero_Perso ne sert à rien: les attributs des instances de classes sont accessibles à tout moment une fois définis
on peut faire print(self.numero_Perso) sans problème
D'autant que lorsque tu invoques choice_perso() tu ne récupère pas de valeur de retour
Comme ici, par exemple:
Pour faire simple, ça, ça marche:
Ca affiche 10
return self.numero_Perso ne sert à rien: les attributs des instances de classes sont accessibles à tout moment une fois définis
on peut faire print(self.numero_Perso) sans problème
D'autant que lorsque tu invoques choice_perso() tu ne récupère pas de valeur de retour
Comme ici, par exemple:
def choice_perso(): n = 12 return(n) r = choice_perso() print(r)
Pour faire simple, ça, ça marche:
class Skin: def __init__(self): self.is_playing = False self.numero_Perso = 0 def choice_perso(self): self.numero_Perso = 10 personnage = Skin() personnage.choice_perso() print(personnage.numero_Perso)
Ca affiche 10
Ajoute peut-être un print() au moment de la création d'un objet.
Ajouter un print() au moment de la création d'un objet t'aidera à comprendre quand tu crées ces objets.
Je pense que tu ne maitrises pas ce que tu as réalisé.
Comme tu ne montres qu'une petite partie, difficile de te guider plus précisément.