Problème de variable
JulesBourillon
-
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention -
yg_be Messages postés 23437 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.
2 réponses
-
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention Ambassadeur 1 588
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.-
Je ne suis pas sur de bien comprendre, en effet il n'y a pas tout mon code mais juste un seul fichier qui est bien entier. Pourquoi mes objets ne seraient pas permanents ?
- En soi le print ne me sers que pour voir la valeur de la variable. Mais je crois que le problème n'est pas la. D'apreès moi, c'est juste que lorsque ma fonction choice_perso s'active mais que je ne clique pas sur l'un des rectangles elle me renvoie la valeur de la variable que je lui donne en argument soit le self.numero_Perso initial = 0.
- En effet, le print ne sert strictement à rien, sauf à t'aider à comprendre tes erreurs.
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.
-
-
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:
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