Rozdział 20 · Tworzenie gier z Pygame

Klatki na sekundę i czas klatki

FPS i czas klatki — dwie strony jednej wielkości, a clock.tick() tylko trzyma cykl, ale go nie przyspiesza.

FPS (frames per second, klatki na sekundę) – ile razy na sekundę gra udaje mu się przejść przez cały cykl Input → Update → Render i pokazać graczowi nową klatkę. Inne Jeśli system wyświetlania i wyjścia są w stanie wyświetlić dodatkowe klatki, tym wyższe Płynność animacji może poprawić wizualną płynność ruchu – ale płynność już Naturalne fizyczne ograniczenie związane z ekranem i czasem, jaki zajmuje każdy kod Rama.

Czas klatki

Czas klatki (frame time) to liczba milisekund, jakie trwała pojedyncza pętla. FPS oraz Czas ramki to dwie strony tej samej wartości:

vremya_kadra.py
#frame_time trwa sekundy, fps klatki na sekundę
frame_time = 1 / 60          # 60 klatek na sekundę -> sekund na klatkę
fps = 1 / frame_time         # powrót: sekundy na klatkę -> fps

print(frame_time)   # 0,016666... sekund, czyli około 16,7 ms na klatkę
print(fps)          # 60.0

clock.tick(60) z sekcji 20.2 nie przyspiesza gry – wręcz przeciwnie, Jest sztucznie przytrzymuje pętlę, jeśli ta próbuje wykonać się szybciej niż 60 razy w sekundę, i nic nie może zrobić, jeśli kod jednej klatki sam zajmuje więcej czasu, niż przewidziany budżet. Rzeczywisty, zmierzony FPS można poznać poprzez clock.get_fps(), ale nie od razu: średnio wypada na ostatnie dziesięć Wyzwania clock.tick() szczerze wraca do dziesiątej klatki 0.0. Zero w pierwszych klatkach nie jest zepsutym licznikiem, ale jeszcze nie Zebrane statystyki.

Brak limitu częstotliwości – cykl zużywa 100% CPU
Jeśli nic nie ogranicza tempa cykli, staje się to prostym busy loop i działa tak szybko, jak CPU – często tysiące klatek na sekundę, bez korzyści dla gracza, ale z pełnym wykorzystaniem rdzenia CPU i zwiększonym zużyciem baterii w laptopie lub telefonie (Rozdział 20.13). W cyklu gry tej książki rozwiązanie jest następujące clock.tick(FPS) na końcu każdej klatki inne silniki i gry mogą inaczej kontrolować tempo: za pomocą vsync, stałego timestep- schedulera lub własnego systemu czasowania silnika.
Praktyka: FPS i budżet
Zeskanowanie bezpośrednio w przeglądarce – nie wymaga instalacji Pygame
Otwórz praktykę →