Кадры в секунду и время кадра
FPS и время кадра — две стороны одной величины, а clock.tick() лишь придерживает цикл, но не ускоряет его.
FPS (frames per second, кадров в секунду) — сколько раз в секунду игра успевает пройти полный цикл Input → Update → Render и показать новый кадр игроку. При прочих равных, если дисплей и система вывода способны показать дополнительные кадры, более высокая частота кадров может сделать движение визуально плавнее — но у частоты кадров есть естественный физический предел, завязанный на экран и время, которое требуется коду каждого кадра.
Время кадра
Время кадра (frame time) — это то, сколько миллисекунд занял один проход цикла. FPS и время кадра — две стороны одной величины:
# frame_time — в секундах, fps — кадров в секунду
frame_time = 1 / 60 # 60 кадров в секунду -> секунд на кадр
fps = 1 / frame_time # и обратно: секунд на кадр -> кадров в секунду
print(frame_time) # 0.016666... секунды, то есть примерно 16.7 мс на кадр
print(fps) # 60.0
clock.tick(60) из раздела 20.2 не ускоряет игру — наоборот,
он искусственно придерживает цикл, если тот пытается выполниться быстрее 60 раз в
секунду, и ничего не может сделать, если код одного кадра сам по себе занимает больше
времени, чем отведённый бюджет. Реальный, измеренный FPS можно узнать через
clock.get_fps(), но не сразу: он усредняет последние десять
вызовов clock.tick() и до десятого кадра честно возвращает
0.0. Ноль в первых кадрах — это не сломанный счётчик, а ещё не
набранная статистика.
clock.tick(FPS) в конце каждого кадра — другие движки и игры могут управлять темпом иначе: через vsync, фиксированный timestep-планировщик или собственную систему тайминга движка.