Pygame获取FPS始终显示0.0的技术问题求助
解决Pygame中get_fps()始终返回0.0的问题
你的代码核心问题是每次循环都创建了新的pygame.time.Clock()实例——get_fps()需要基于同一个Clock对象累计的时间数据计算帧率,每次新建实例会重置所有计时信息,自然无法得到有效数值。
修正后的基础代码
import pygame from pygame.locals import * pygame.init() screen = pygame.display.set_mode((800, 600)) clock = pygame.time.Clock() # 仅创建一次Clock实例,全程复用 running = True while running: # 必须处理窗口事件,避免程序假死 for event in pygame.event.get(): if event.type == QUIT: running = False # 获取当前帧率 current_fps = clock.get_fps() print(f"当前FPS: {current_fps:.2f}") # 控制帧率为60,必须用同一个clock对象调用tick() clock.tick(60) pygame.quit()
关键说明
- 单一Clock实例:将
clock = pygame.time.Clock()放在循环外,让它持续记录帧间隔时间,这是get_fps()能计算出有效帧率的前提。 - 事件处理:添加
pygame.event.get()循环处理窗口事件,否则系统会判定程序无响应。 - tick()的作用:
clock.tick(60)会限制循环每秒最多执行60次,同时更新Clock内部的计时数据,为帧率计算提供依据。
进阶:在游戏窗口内显示FPS
如果需要在窗口中直观显示帧率,可结合Pygame的字体模块实现:
import pygame from pygame.locals import * pygame.init() screen = pygame.display.set_mode((800, 600)) clock = pygame.time.Clock() font = pygame.font.SysFont(None, 40) # 创建字体对象 running = True while running: for event in pygame.event.get(): if event.type == QUIT: running = False current_fps = clock.get_fps() # 生成FPS文本渲染表面 fps_surface = font.render(f"FPS: {current_fps:.2f}", True, (255, 255, 255)) screen.fill((0, 0, 0)) # 清空屏幕背景 screen.blit(fps_surface, (10, 10)) # 在窗口左上角绘制FPS文本 pygame.display.flip() # 更新屏幕显示 clock.tick(60) pygame.quit()
内容的提问来源于stack exchange,提问作者Hudson Rocke
相关产品推荐
相关产品推荐

