Pygame中实现FPS计数器始终显示0的问题如何解决?
问题根因
- 最核心的原因是你没有在游戏主循环中调用
clock.tick(帧率上限)方法。pygame.time.Clock的get_fps()是通过统计两次tick()调用的间隔计算帧率的,缺少tick()调用时该方法会固定返回0。 - 若你在调用
Render_Text之后才执行pygame.display.update()/pygame.display.flip()刷新屏幕,也会导致FPS文本没有被渲染到可见画面上。 - 游戏启动的前1-2秒
get_fps()会因为采样数据不足返回0,属于正常现象,运行几秒后就会返回正确帧率。
修复方案
首先优化文本渲染函数,避免每次渲染都重复加载字体造成不必要的性能损耗:
# 全局仅加载一次字体,不要放在Render_Text内部 font = pygame.font.Font('assets/Roboto.ttf', 30) def Render_Text(what, color, where): text = font.render(what, 1, pygame.Color(color)) window.blit(text, where)
调整主循环的执行顺序,确保tick()调用和渲染顺序正确:
# 游戏主循环示例 running = True while running: # 处理系统事件 for event in pygame.event.get(): if event.type == pygame.QUIT: running = False # 你的游戏业务逻辑代码 # 渲染FPS文本 Render_Text(str(int(clock.get_fps())), (255,0,0), (0,0)) print("FPS:", int(clock.get_fps())) # 刷新屏幕 pygame.display.flip() # 必须调用tick限制最高帧率,参数可根据需求调整,比如填60代表最高60FPS clock.tick(60)
内容的提问来源于stack exchange,提问作者Bla0
相关产品推荐
相关产品推荐

