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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 18:36:04