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};
|
enum class DeathCause {NONE, OUT_OF_BOUNDS, KILLED, TIME_OUT};
|
||||||
|
|
||||||
private:
|
private:
|
||||||
WidgetTimer widget_timer;
|
|
||||||
sf::Time next_frame_time;
|
|
||||||
std::vector<Object::Ptr> pending_kill;
|
|
||||||
|
|
||||||
Mode mode;
|
Mode mode;
|
||||||
|
|
||||||
|
sf::Time next_frame_time;
|
||||||
|
unsigned int skipped_frames;
|
||||||
|
|
||||||
|
std::vector<Object::Ptr> pending_kill;
|
||||||
DeathCause death_cause;
|
DeathCause death_cause;
|
||||||
|
|
||||||
|
WidgetTimer widget_timer;
|
||||||
float time_left;
|
float time_left;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
32
src/game.cpp
32
src/game.cpp
|
@ -4,13 +4,23 @@
|
||||||
#include "game.hpp"
|
#include "game.hpp"
|
||||||
#include "player.hpp"
|
#include "player.hpp"
|
||||||
|
|
||||||
Game::Game(Manager& manager) : Level(manager),
|
/**
|
||||||
widget_timer(manager, false),
|
* Définition des variables et fonctions globales internes
|
||||||
next_frame_time(manager.getCurrentTime()) {
|
* (accessibles uniquement dans ce fichier)
|
||||||
mode = Game::Mode::NORMAL;
|
*/
|
||||||
death_cause = Game::DeathCause::NONE;
|
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() {}
|
Game::~Game() {}
|
||||||
|
|
||||||
void Game::processEvent(const sf::Event& event) {
|
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
|
// on s'assure que la caméra soit centrée sur nos joueurs
|
||||||
ensureCentered();
|
ensureCentered();
|
||||||
|
|
||||||
// si on a encore suffisamment de temps, on dessine
|
// si on a encore suffisamment de temps, ou si on a sauté
|
||||||
if (current_time < next_frame_time) {
|
// trop de frames, on dessine
|
||||||
|
if (current_time < next_frame_time || skipped_frames >= MAX_FRAME_SKIP) {
|
||||||
draw();
|
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 {
|
} else {
|
||||||
// si nous sommes en avance, on endort le processus
|
// si nous sommes en avance, on endort le processus
|
||||||
// le temps nécessaire pour revenir dans les temps
|
// le temps nécessaire pour revenir dans les temps
|
||||||
|
|
Loading…
Reference in New Issue