Modification de la boucle principale pour réduire la charge CPU
This commit is contained in:
		
							parent
							
								
									53c4573edb
								
							
						
					
					
						commit
						a40d724506
					
				|  | @ -18,7 +18,7 @@ private: | |||
|     std::string level_name; | ||||
|     sf::Sprite background; | ||||
| 
 | ||||
|     sf::Time accumulator; | ||||
|     sf::Time next_frame_time; | ||||
| 
 | ||||
|     std::vector<ObjectPtr> objects; | ||||
|     std::vector<std::pair<float, float>> level_zone; | ||||
|  |  | |||
|  | @ -14,7 +14,6 @@ private: | |||
|     sf::RenderWindow window; | ||||
|     sf::Clock clock; | ||||
| 
 | ||||
|     sf::Time elapsed_time; | ||||
|     ResourceManager resource_manager; | ||||
|     std::array<bool, sf::Keyboard::KeyCount> keys; | ||||
| 
 | ||||
|  | @ -39,10 +38,9 @@ public: | |||
|     sf::RenderWindow& getWindow(); | ||||
| 
 | ||||
|     /**
 | ||||
|      * Renvoie le temps écoulé entre la frame précédente | ||||
|      * et la frame actuelle | ||||
|      * Renvoie le temps actuel du jeu | ||||
|      */ | ||||
|     sf::Time getElapsedTime() const; | ||||
|     sf::Time getCurrentTime() const; | ||||
| 
 | ||||
|     /**
 | ||||
|      * Renvoie le gestionnaire de ressources | ||||
|  |  | |||
							
								
								
									
										30
									
								
								src/game.cpp
								
								
								
								
							
							
						
						
									
										30
									
								
								src/game.cpp
								
								
								
								
							|  | @ -19,7 +19,9 @@ std::map<unsigned int, std::function<std::shared_ptr<Object>(std::ifstream&)>> o | |||
|     {Block::TYPE_ID, Block::load} | ||||
| }; | ||||
| 
 | ||||
| Game::Game(Manager& manager) : View(manager), accumulator(sf::Time::Zero) {} | ||||
| Game::Game(Manager& manager) : View(manager), | ||||
|     next_frame_time(manager.getCurrentTime()) {} | ||||
| 
 | ||||
| Game::~Game() { | ||||
|     objects.clear(); | ||||
| } | ||||
|  | @ -109,15 +111,25 @@ void Game::save() { | |||
| } | ||||
| 
 | ||||
| void Game::frame() { | ||||
|     // tant qu'il reste du temps à passer,
 | ||||
|     // effectuer la simulation physique étape par étape
 | ||||
|     while (accumulator > Constants::PHYSICS_TIME) { | ||||
|         accumulator -= Constants::PHYSICS_TIME; | ||||
|         update(); | ||||
|     } | ||||
|     sf::Time current_time = manager.getCurrentTime(); | ||||
| 
 | ||||
|     draw(); | ||||
|     accumulator += manager.getElapsedTime(); | ||||
|     if (current_time >= next_frame_time) { | ||||
|         // si nous sommes en retard ou dans les temps
 | ||||
|         // on replanifie la prochaine frame
 | ||||
|         next_frame_time += Constants::PHYSICS_TIME; | ||||
| 
 | ||||
|         // on met à jour la physique d'un cran temporel
 | ||||
|         update(); | ||||
| 
 | ||||
|         // si on a encore suffisamment de temps, on dessine
 | ||||
|         if (current_time < next_frame_time) { | ||||
|             draw(); | ||||
|         } | ||||
|     } else { | ||||
|         // si nous sommes en avance, on endort le processus
 | ||||
|         // le temps nécessaire pour revenir dans les temps
 | ||||
|         sf::sleep(next_frame_time - current_time); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| void Game::update() { | ||||
|  |  | |||
|  | @ -3,7 +3,7 @@ | |||
| Manager::Manager() : window( | ||||
|     sf::VideoMode(704, 480), "Projet CMI", sf::Style::Default, | ||||
|     sf::ContextSettings(0, 0, 2) | ||||
| ), elapsed_time(sf::Time::Zero), view(NULL) { | ||||
| ), view(NULL) { | ||||
|     keys.fill(false); | ||||
| } | ||||
| 
 | ||||
|  | @ -42,7 +42,6 @@ void Manager::start() { | |||
|             throw std::runtime_error("Aucune vue à afficher pour le jeu"); | ||||
|         } | ||||
| 
 | ||||
|         elapsed_time = clock.restart(); | ||||
|         view->frame(); | ||||
|     } | ||||
| } | ||||
|  | @ -55,8 +54,8 @@ sf::RenderWindow& Manager::getWindow() { | |||
|     return window; | ||||
| } | ||||
| 
 | ||||
| sf::Time Manager::getElapsedTime() const { | ||||
|     return elapsed_time; | ||||
| sf::Time Manager::getCurrentTime() const { | ||||
|     return clock.getElapsedTime(); | ||||
| } | ||||
| 
 | ||||
| ResourceManager& Manager::getResourceManager() { | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue