在pygame中更新文本

时间:2017-10-12 22:29:18

标签: 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)

1 个答案:

答案 0 :(得分:0)

您可以简单地将当前分数(首先将其转换为字符串)分配给标签对象的.txt属性,然后调用其update方法。

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

我也只是在draw方法中对表面进行blit,并使用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)