2017-10-12 5 views
1

Qu'est-ce que je fais mal ici? Je veux mettre à jour le texte de l'étiquette pour accommoder un score de joueur. J'ai regardé d'autres exemples et ajouté la méthode de mise à jour mais le texte reste toujours le même.Mise à jour du texte dans pygame

class Label(): 
def __init__(self, txt, location, size=(160,30), bg=WHITE, fg=BLACK, font_name="Segoe Print", font_size=12): 
    self.bg = bg 
    self.fg = fg 
    self.size = size 

    self.font = pygame.font.Font(font_name, font_size) 
    self.txt = txt 
    self.txt_surf = self.font.render(self.txt, 1, self.fg) 
    self.txt_rect = self.txt_surf.get_rect(center=[s//2 for s in self.size]) 

    self.surface = pygame.surface.Surface(size) 
    self.rect = self.surface.get_rect(topleft=location) 



def draw(self): 
    self.surface.fill(self.bg) 
    self.surface.blit(self.txt_surf, self.txt_rect) 
    screen.blit(self.surface, self.rect) 


def update(self): 
    self.txt_surf = self.font.render(self.txt, 1, self.fg) 

    self.surface.blit(self.txt_surf, self.txt_rect) 

Répondre

0

Vous pouvez simplement attribuer le score (le convertir en une chaîne en premier) à l'attribut .txt de votre objet d'étiquette, puis appeler sa méthode update.

# In the main while loop. 
score += 1 
label.txt = str(score) 
label.update() 

Je voudrais aussi juste blit la surface dans la méthode draw et mettre à jour dans la méthode update.

def draw(self, screen): 
    screen.blit(self.surface, self.rect) 

def update(self): 
    self.surface.fill(self.bg) 
    self.txt_surf = self.font.render(self.txt, True, self.fg) 
    self.surface.blit(self.txt_surf, self.txt_rect) 
+0

Derp j'ai oublié de mettre à jour Label.txt dans la boucle pendant que je suis encore un novice en travaillant avec les classes I fogot lors de l'utilisation du pygame.text.render() que je mettais le score de joueur dans l'auto. txt et pas directement dans la méthode text.render. –

+0

Merci beaucoup –