Autorise la boucle de rendu à sauter des frames si on est en retard
This commit is contained in:
		
							parent
							
								
									67074e9050
								
							
						
					
					
						commit
						ccf04a9bf3
					
				|  | @ -21,13 +21,15 @@ public: | |||
|     enum class DeathCause {NONE, OUT_OF_BOUNDS, KILLED, TIME_OUT}; | ||||
| 
 | ||||
| private: | ||||
|     WidgetTimer widget_timer; | ||||
|     sf::Time next_frame_time; | ||||
|     std::vector<Object::Ptr> pending_kill; | ||||
| 
 | ||||
|     Mode mode; | ||||
| 
 | ||||
|     sf::Time next_frame_time; | ||||
|     unsigned int skipped_frames; | ||||
| 
 | ||||
|     std::vector<Object::Ptr> pending_kill; | ||||
|     DeathCause death_cause; | ||||
| 
 | ||||
|     WidgetTimer widget_timer; | ||||
|     float time_left; | ||||
| 
 | ||||
|     /**
 | ||||
|  |  | |||
							
								
								
									
										32
									
								
								src/game.cpp
								
								
								
								
							
							
						
						
									
										32
									
								
								src/game.cpp
								
								
								
								
							|  | @ -4,13 +4,23 @@ | |||
| #include "game.hpp" | ||||
| #include "player.hpp" | ||||
| 
 | ||||
| Game::Game(Manager& manager) : Level(manager), | ||||
|     widget_timer(manager, false), | ||||
|     next_frame_time(manager.getCurrentTime()) { | ||||
|     mode = Game::Mode::NORMAL; | ||||
|     death_cause = Game::DeathCause::NONE; | ||||
| /**
 | ||||
|  * Définition des variables et fonctions globales internes | ||||
|  * (accessibles uniquement dans ce fichier) | ||||
|  */ | ||||
| namespace { | ||||
|     // nombre maximum de frames que l'on peut sauter
 | ||||
|     // en cas de charge CPU importante
 | ||||
|     const unsigned int MAX_FRAME_SKIP = 5; | ||||
| } | ||||
| 
 | ||||
| Game::Game(Manager& manager) : Level(manager), | ||||
|     mode(Game::Mode::NORMAL), | ||||
|     next_frame_time(manager.getCurrentTime()), | ||||
|     skipped_frames(0), | ||||
|     death_cause(Game::DeathCause::NONE), | ||||
|     widget_timer(manager, false) {} | ||||
| 
 | ||||
| Game::~Game() {} | ||||
| 
 | ||||
| void Game::processEvent(const sf::Event& event) { | ||||
|  | @ -95,10 +105,18 @@ void Game::frame() { | |||
|         // on s'assure que la caméra soit centrée sur nos joueurs
 | ||||
|         ensureCentered(); | ||||
| 
 | ||||
|         // si on a encore suffisamment de temps, on dessine
 | ||||
|         if (current_time < next_frame_time) { | ||||
|         // si on a encore suffisamment de temps, ou si on a sauté
 | ||||
|         // trop de frames, on dessine
 | ||||
|         if (current_time < next_frame_time || skipped_frames >= MAX_FRAME_SKIP) { | ||||
|             draw(); | ||||
|         } | ||||
| 
 | ||||
|         // sinon, on saute une frame de dessin. On stocke
 | ||||
|         // le nombre de frames sautées pour ne pas sauter plus que
 | ||||
|         // le maximum
 | ||||
|         else { | ||||
|             skipped_frames++; | ||||
|         } | ||||
|     } else { | ||||
|         // si nous sommes en avance, on endort le processus
 | ||||
|         // le temps nécessaire pour revenir dans les temps
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue