Итак, я делаю игровой движок на питоне, используя pygame. Я пытаюсь получить и отобразить fps с помощью pygame.time.Clock().get_fps(), но он говорит только 0.0 . Вот основной код:
import pygame
from pygame.locals import *
screen = pygame.display.set_mode()
while 1:
print(pygame.time.Clock().get_fps())
pygame.time.Clock().tick(60)
Мне просто нужно что-нибудь, что точно показывает текущий fps.
См. get_fps()
Вычислите частоту кадров вашей игры (в кадрах в секунду). Он вычисляется путем усреднения последних десяти вызовов
Clock.tick()
.
Итак, есть 2 причины, по которым ваш код не работает. Вы создаете новый экземпляр pygame.time.Clock()
каждый раз, когда вы его вызываете, и FPS не может быть усреднен. Но еще большая проблема в том, что вы звоните tick
из другого экземпляра.
Вы должны создать один объект Clock перед циклом приложения, но не в цикле приложения, и вызывать tick
и get_fps
из этого объекта. Также обрабатывать события в цикле приложения (окно PyGame не отвечает через несколько секунд):
import pygame
from pygame.locals import *
screen = pygame.display.set_mode()
clock = pygame.time.Clock()
while 1:
pygame.event.pump()
print(clock.get_fps())
clock.tick(60)
Лучшим способом было бы создать часы в верхней части кода. Затем в конце игрового цикла вы можете активировать функцию .tick.
import pygame
from pygame.locals import *
pygame.init()
screen = pygame.display.set_mode()
clock = pygame.time.Clock()
while True:
pygame.display.update()
clock.tick(60)
В чем разница с моим ответом? Есть ли что-то новое, что не было включено в мой ответ?
Наши ответы почти совпадают. В стандартной pygame наш игровой цикл должен быть непрерывным. Либо, скажем, пока True, либо пока работает. Поскольку наш игровой цикл верен, и мы не закончили нашу игру, нет необходимости в «pygame.event.pump()», потому что наш игровой цикл выполняется постоянно.
Нет. В некоторых системах ваша петля перестанет отвечать. Вы должны вызвать pygame.event.pump()
. См. Окно Pygame не отвечает через несколько секунд
pygame.time.Clock()
создает новые часы каждый раз, когда вы их вызываете.