You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pygame游戏分数更新失败求助:如何同步更新屏幕分数文本?

问题原因与解决办法

你的分数不更新核心有两个问题:

  • 更新Team1Score/Team2Score后,没同步更新self.Title字符串,导致渲染文本时用的还是初始的0 - 0
  • 在AddScore里直接调用window.blit不符合Pygame渲染流程,应该统一在主循环的绘制阶段刷新画面

修改步骤

  1. 预创建字体对象:避免每次渲染文本都重新生成字体,节省资源
  2. 新增文本更新方法:修改分数后立即更新分数字符串并重新渲染文本
  3. 统一绘制逻辑:移除AddScore中的window.blit调用,所有绘制工作交给DrawScore,由主循环统一触发

修改后的完整代码

class Score:
    def __init__(self):
        self.Colour = (230, 230, 230)
        self.x = 25
        self.y = 0
        self.Shape = pygame.Rect((self.x, self.y), (200, 100))
        self.Team1Score = 0
        self.Team2Score = 0
        # 初始化时创建一次字体对象,重复使用
        self.font = pygame.font.SysFont('arialunicode', 40)
        # 初始化分数文本
        self.update_text()
        self.Score = False

    def update_text(self):
        # 更新分数字符串并重新渲染文本
        self.Title = f"{self.Team1Score}  -  {self.Team2Score}"
        self.text_type = self.font.render(self.Title, True, (0, 0, 0))
        self.text_rect = self.text_type.get_rect(center=self.Shape.center)

    def DrawScore(self, window):
        pygame.draw.rect(window, self.Colour, self.Shape)
        window.blit(self.text_type, self.text_rect)

    def AddScore(self, score, p1):
        self.Score = score
        if p1.Shooting and self.Score:
            if p1.Colour == (255, 0, 0):
                self.Team1Score += 1
            else:
                self.Team2Score += 1
            # 分数变更后同步更新文本
            self.update_text()

主循环配套修改

确保主游戏循环每帧都调用DrawScore,并先清空窗口避免旧画面残留:

# 假设score是Score类的实例
while running:
    # 处理事件、更新游戏逻辑...
    window.fill((0,0,0))  # 用你的背景色替换
    score.DrawScore(window)
    # 绘制其他游戏元素...
    pygame.display.flip()  # 更新显示画面

这样修改后,每次调用AddScore更新分数时,文本会同步刷新,再通过主循环的统一绘制,屏幕上的分数就能正常更新了。

内容的提问来源于stack exchange,提问作者Kelan Westwood

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 14:50:38