Bonjour tout le monde,
Pourriez-vous svp m'aider à solutionner le problème suivant:
Je suis au début de la création d'un petit casse-brique (je débute en programmation). Pour l'instant, j'ai une fenêtre, une balle, et une barre qui se déplace. Autant dire qu'il n'y a pas grand chose.
Le souci est que lorsque je compile le programme pour le tester, le processeur se met à tourner à fond. Le premier coeur est utilisé à 100%, ce qui génère pas mal de bruit et vide la batterie du laptop.
Du coup, je souhaite connaître la manière la plus propre de réduire l'utilisation du processeur sans altérer la fluidité du programme.
Pour info, j'ai essayé sf::sleep() et window.setFramerateLimit() [sans FPS limit, le "jeu" tourne à plus de 2000 FPS, d'où l'utilisation extrême du processeur].
Ces deux solutions ne me donnent pas satisfaction car les déplacements de la barre ne sont plus fluides (même lorsque le FPS est limité à 100, ce qui devait en principe être suffisant pour avoir un mouvement fluide). Etant à court de solution, je fais appel à vous.
Merci d'avance à tous,
Phounet
Main.cpp#include <SFML/Graphics.hpp>
#include <SFML/Audio.hpp>
#include <iostream>
#include <cstdlib>
#include "Moteur.h"
using namespace std;
using namespace sf;
int main()
{
Moteur moteur;
FenPrincipale window;
Balle balle(window);
Barre barre(window);
moteur.setPositionBarre(window, barre);
while (window.isOpen())
{
sf::Event event;
while (window.pollEvent(event))
{
if (event.type == sf::Event::Closed)
{
window.close();
}
}
moteur.deplacerBarre(window, barre);
window.clear();
window.draw(balle);
window.draw(barre);
window.display();
}
return 0;
}
Moteur.h#ifndef MOTEUR_H_INCLUDED
#define MOTEUR_H_INCLUDED
#include <SFML/Graphics.hpp>
#include <iostream>
#include "FenPrincipale.h"
#include "Balle.h"
#include "Barre.h"
class Moteur
{
public:
Moteur();
~Moteur();
void restartHorlogeBarre();
void setPositionBarre(FenPrincipale&, Barre&);
void deplacerBarre(FenPrincipale&, Barre&);
private:
sf::Time m_tempsBarre;
sf::Clock m_horlogeBarre;
};
#endif // MOTEUR_H_INCLUDED
Moteur.cpp#include "Moteur.h"
using namespace std;
using namespace sf;
Moteur::Moteur()
{
cout << "Construction du moteur." << endl;
}
Moteur::~Moteur()
{
cout << "Destruction du moteur." << endl;
}
void Moteur::restartHorlogeBarre()
{
m_horlogeBarre.restart().asSeconds();
}
void Moteur::setPositionBarre(FenPrincipale& window, Barre& barre)
{
barre.setPosition(window.getLargeur()/2 - barre.getLargeur(), window.getHauteur() - barre.getHauteur());
}
void Moteur::deplacerBarre(FenPrincipale& window, Barre& barre)
{
float vitesseBarre = barre.getVitesse();
float largeurBarre = barre.getLargeur();
float barrePosY = barre.getPositionY();
float largeurFenetre = window.getLargeur();
m_tempsBarre = m_horlogeBarre.restart();
if(Keyboard::isKeyPressed(Keyboard::Left))
{
if(barre.getPosition().x > 0)
{
barre.move(Vector2f(-vitesseBarre * m_tempsBarre.asSeconds(), 0));
}
else
{
barre.setPosition(0, barrePosY);
}
}
else if(Keyboard::isKeyPressed(Keyboard::Right))
{
if(barre.getPosition().x < largeurFenetre - largeurBarre)
{
barre.move(Vector2f(vitesseBarre * m_tempsBarre.asSeconds(), 0));
}
else
{
barre.setPosition(largeurFenetre - largeurBarre, barrePosY);
}
}
}