Ajout du controle des fps et d'un système de contrebalance de latence
This commit is contained in:
parent
0f5f6cc21c
commit
937fc88297
|
@ -44,22 +44,66 @@ class Engine:
|
|||
self.settings_manager.get_sound_global_master_volume(),
|
||||
self.settings_manager.get_sound_master_volume())
|
||||
|
||||
self.global_latency = 0
|
||||
self.last_latency = []
|
||||
self.latency_precision = self.settings_manager.latency_precision
|
||||
|
||||
def loop(self):
|
||||
"""Fonction à lancer au début du programme et qui va lancer les updates dans une boucle.
|
||||
Attend jusqu'à la fin du jeu."""
|
||||
self.running = True
|
||||
|
||||
delta = 1. # Le delta est le temps depuis la dernière image
|
||||
last_time = time.time_ns()/10E8
|
||||
while self.running:
|
||||
self.update(delta)
|
||||
self.start_time = time.time()
|
||||
self.frames = 0
|
||||
|
||||
new_time = time.time_ns()/10E8
|
||||
# Initialisation ddes valeurs de delta et de last_time
|
||||
delta = 1. # Le delta est le temps depuis la dernière image
|
||||
last_time = time.time()
|
||||
|
||||
latency = 0
|
||||
|
||||
|
||||
|
||||
|
||||
while self.running:
|
||||
refresh_rate = self.settings_manager.get_refresh_rate()
|
||||
if refresh_rate == -1: # Pas de limite, vers l'infini et l'au-delà !!!
|
||||
|
||||
self.update(delta)
|
||||
new_time = time.time()
|
||||
delta = new_time - last_time
|
||||
last_time = new_time
|
||||
|
||||
else:
|
||||
while time.time() < last_time + 1 / refresh_rate - self.global_latency:
|
||||
pass
|
||||
|
||||
new_time = time.time()
|
||||
delta = new_time-last_time
|
||||
last_time = new_time
|
||||
|
||||
|
||||
self.update(delta)
|
||||
|
||||
latency = delta - 1/refresh_rate
|
||||
if not latency > self.global_latency * 100 or self.global_latency == 0 or self.settings_manager.get_refresh_rate() != refresh_rate: # Impossible que le jeu prenne autant de retard, on skip cette latence dans le calcul, l'utilisateur a surement cliquer hors de la fenêtre
|
||||
if len(self.last_latency) < self.latency_precision:
|
||||
self.last_latency.append(latency)
|
||||
else:
|
||||
self.last_latency.pop(0)
|
||||
self.last_latency.append(latency)
|
||||
|
||||
n = 0
|
||||
for i in self.last_latency:
|
||||
n += i
|
||||
|
||||
self.global_latency = n/len(self.last_latency)
|
||||
|
||||
def update(self, delta: float):
|
||||
self.frames += 1
|
||||
if time.time() > 50 + self.start_time:
|
||||
print(self.frames/50)
|
||||
exit()
|
||||
"""Fonction qui regroupe toutes les updates des composants. Elle permet de mettre à jour le jeu quand on
|
||||
l'appelle."""
|
||||
self.camera.update(delta, self.settings_manager.get_zoom())
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
class SettingsManager:
|
||||
def __init__(self, default_master_volume: float, default_zoom: float) -> None:
|
||||
self.refresh_rate = 200
|
||||
self.latency_precision = 100 # Nombre de valeurs de latence stocké (Pour faire la moyenne)
|
||||
self.master_volume = default_master_volume
|
||||
self.sound_master_volume = 100
|
||||
self.music_master_volume = 100
|
||||
|
@ -7,6 +9,9 @@ class SettingsManager:
|
|||
|
||||
self.zoom = default_zoom
|
||||
|
||||
def get_refresh_rate(self):
|
||||
return self.refresh_rate
|
||||
|
||||
def get_zoom(self):
|
||||
return self.zoom
|
||||
|
||||
|
|
Loading…
Reference in a new issue