Pygame分数显示不更新问题:拾取硬币后数值变更但界面无刷新
Pygame分数不更新问题的修复
错误原因
你在main.py中只在游戏循环外部生成了一次分数Surface(score变量),之后即使level.score的值累加更新,这个Surface的内容不会自动同步变化,循环里一直绘制的是最初生成的旧分数画面。
Pygame的font.render()方法生成的是静态的Surface对象,它不会随传入的变量(比如level.score)自动更新,必须手动重新调用render()来生成新的Surface,才能显示最新的分数。
修正后的代码
将分数渲染的代码移到游戏循环内部,每次循环都基于最新的level.score重新生成分数Surface:
scorefont=pygame.font.Font('Fonts/Pixeltype.ttf',50) game_active=True while game_active: # 每次循环都重新渲染分数,使用最新的level.score值 score=scorefont.render('Score: {}'.format(level.score),False,'White') screen.blit(score,(0,0)) # 记得补充处理游戏事件、刷新屏幕的代码(比如pygame.event.get()、pygame.display.flip())
可选优化(非必需)
如果担心频繁调用render()影响性能,可以在Level类中添加分数变化的触发机制(比如设置一个score_updated标志),只在分数确实变化时重新渲染分数Surface。但对于这类简单的2D游戏,直接在循环中每次渲染的性能影响几乎可以忽略,代码也更简洁易维护。
内容的提问来源于stack exchange,提问作者22S3-C alden limyuhong
相关产品推荐
相关产品推荐

