为什么格式化变量没有在屏幕上更新以及如何修复它

Why the formated variable is not being updated on the screen and how to fix it

键 space 将 +2 添加到变量 player.mana,按下时我看到控制台上的变量递增,但屏幕上的格式化字符串文本没有。如何在屏幕上正确显示?

import pygame
import sys

pygame.init()

clock = pygame.time.Clock()
font = pygame.font.SysFont('Arial', 30)
screen = pygame.display.set_mode((640, 480))
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)


class Players:
    def __init__(self, mana):
        self.mana = mana


player = Players(0)

text_player_mana = font.render(f'Mana: {player.mana}', True, WHITE)

running = True
while running:
    screen.fill(BLACK)
    clock.tick(60)

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

        keys = pygame.key.get_pressed()

        if event.type == pygame.KEYDOWN:
            if keys[pygame.K_ESCAPE]:
                running = False
            if keys[pygame.K_SPACE]:
                player.mana += 2

    screen.blit(text_player_mana, (200, 200))
    print(player.mana)
    pygame.display.update()

pygame.quit()
sys.exit()

变量和渲染的 Surface 没有绑定。当您更改变量时,Surface 不会神奇地改变。你需要re-render Surface 当变量改变时:

text_player_mana = font.render(f'Mana: {player.mana}', True, WHITE)

running = True
while running:
    screen.fill(BLACK)
    clock.tick(60)

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

        keys = pygame.key.get_pressed()

        if event.type == pygame.KEYDOWN:
            if keys[pygame.K_ESCAPE]:
                running = False
            if keys[pygame.K_SPACE]:
                player.mana += 2

                # player.mana has changed, so text_player_mana needs to be rendered
                text_player_mana = font.render(f'Mana: {player.mana}', True, WHITE)

    screen.blit(text_player_mana, (200, 200))
    print(player.mana)
    pygame.display.update()