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