Pygame游戏分数更新失败求助:如何同步更新屏幕分数文本?
问题原因与解决办法
你的分数不更新核心有两个问题:
- 更新
Team1Score/Team2Score后,没同步更新self.Title字符串,导致渲染文本时用的还是初始的0 - 0 - 在
AddScore里直接调用window.blit不符合Pygame渲染流程,应该统一在主循环的绘制阶段刷新画面
修改步骤
- 预创建字体对象:避免每次渲染文本都重新生成字体,节省资源
- 新增文本更新方法:修改分数后立即更新分数字符串并重新渲染文本
- 统一绘制逻辑:移除
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
相关产品推荐
相关产品推荐

