-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfps.py
More file actions
54 lines (40 loc) · 1.68 KB
/
fps.py
File metadata and controls
54 lines (40 loc) · 1.68 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import pygame
from threading import Thread, Event
DEFAULT_FONT_SIZE = 20
class FPS(Thread):
""" Trames par seconde (frames per second - FPS). """
def __init__(self) -> None:
"""
Initialise une instance de FPS. Un objet FPS permet d'estimer le nombre de trames par seconde.
"""
super().__init__()
self.__tick = 0
self.__fps = 0
default_font_name = pygame.font.get_default_font()
self.__font = pygame.font.Font(default_font_name, 15)
self.__surface = None
# événement servant à arrêter la tâche (va aussi la réveiller si nécessaire)
self.__event = Event()
def tick(self) -> None:
"""
Méthode à appeler à chaque passage pour calculer le FPS.
Incrémente un compteur (tick) à chaque appel. Le nombre de ticks en une seconde indique le nombre de trame
affichée en une seconde (FPS) à condition d'appeler tick() à chaque trame.
"""
self.__tick += 1
def get(self) -> pygame.Surface:
"""
Retourne une surface pour l'affichage des FPS.
:return: la surface qui contient le texte (FPS)
"""
fps_str = f"FPS:{self.__fps}"
return self.__font.render(fps_str, True, (255, 255, 255))
def run(self) -> None:
""" Tâche de compilation du FPS. """
while not self.__event.is_set():
self.__event.wait(1)
self.__fps = self.__tick # sauvegarde le FPS obtenu pour la dernière seconde écoulée
self.__tick = 0
def stop(self) -> None:
""" Arrête la tâche FPS. """
self.__event.set()