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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 10:55:19