Lorsqu'on l'on crée un jeu, on aime bien afficher le nombre de FPS. Malheureusement, on n'a pas toujours envie de refiler un fichier font exprès pour ca, et on ne sait pas forcément si l'utilisateur a la font que l'on souhaite utiliser.
Voilà donc de quoi afficher les FPS sans sf::String !
#ifndef CFPS_HPP_INCLUDED #define CFPS_HPP_INCLUDED #include <sfml/Graphics.hpp> #define EPAISSEUR 2 #define LARGEUR 4 #define HAUTEUR 10 #define ENTRE_LETTRE 10 #define DECALAGE_GAUCHE 5 #define DECALAGE_HAUT 10 #define HAUT_LETTRE DECALAGE_HAUT #define MILIEU_LETTRE DECALAGE_HAUT + HAUTEUR / 2 #define BAS_LETTRE DECALAGE_HAUT + HAUTEUR class cFPS { private: sf::Vector2<float> m_position; sf::Color m_color; sf::Clock m_clock; sf::Shape m_shape; int m_fps; public: cFPS (sf::Vector2<float> position = sf::Vector2<float>(5.0f,5.0f), sf::Color color = sf::Color(255,255,255)); void Draw(sf::RenderWindow& App); void cFPS::DrawNumber (sf::RenderWindow& App, int number, int offset); }; cFPS::cFPS (sf::Vector2<float> position, sf::Color color) { m_position = position; m_color = color; m_clock.Reset(); } void cFPS::Draw (sf::RenderWindow& App) { //On considère ici que les FPS sont situés entre 0 et 9999 DrawNumber ( App, (m_fps/1000)%10, 0); DrawNumber ( App, (m_fps/100)%10, 1); DrawNumber ( App, (m_fps/10)%10, 2); DrawNumber ( App, (m_fps)%10, 3); m_fps = static_cast<int> (1.f / m_clock.GetElapsedTime()); m_clock.Reset(); } void cFPS::DrawNumber (sf::RenderWindow& App, int number, int offset) { float GAUCHE_LETTRE = DECALAGE_GAUCHE + (offset * ENTRE_LETTRE); float DROITE_LETTRE = GAUCHE_LETTRE + LARGEUR; switch (number) { case 0: App.Draw(sf::Shape::Line (GAUCHE_LETTRE, HAUT_LETTRE, DROITE_LETTRE, HAUT_LETTRE, EPAISSEUR, m_color, 0, m_color) ); App.Draw(sf::Shape::Line (DROITE_LETTRE, HAUT_LETTRE, DROITE_LETTRE, BAS_LETTRE, EPAISSEUR, m_color, 0, m_color) ); App.Draw(sf::Shape::Line (DROITE_LETTRE, BAS_LETTRE, GAUCHE_LETTRE, BAS_LETTRE, EPAISSEUR, m_color, 0, m_color) ); App.Draw(sf::Shape::Line (GAUCHE_LETTRE, HAUT_LETTRE, GAUCHE_LETTRE, BAS_LETTRE, EPAISSEUR, m_color, 0, m_color) ); break; case 1: App.Draw(sf::Shape::Line (DROITE_LETTRE, HAUT_LETTRE, DROITE_LETTRE, BAS_LETTRE, EPAISSEUR, m_color, 0, m_color) ); break; case 2: App.Draw(sf::Shape::Line (GAUCHE_LETTRE, HAUT_LETTRE, DROITE_LETTRE, HAUT_LETTRE, EPAISSEUR, m_color, 0, m_color) ); App.Draw(sf::Shape::Line (DROITE_LETTRE, HAUT_LETTRE, DROITE_LETTRE, MILIEU_LETTRE, EPAISSEUR, m_color, 0, m_color) ); App.Draw(sf::Shape::Line (DROITE_LETTRE, MILIEU_LETTRE, GAUCHE_LETTRE, MILIEU_LETTRE, EPAISSEUR, m_color, 0, m_color) ); App.Draw(sf::Shape::Line (GAUCHE_LETTRE, MILIEU_LETTRE, GAUCHE_LETTRE, BAS_LETTRE, EPAISSEUR, m_color, 0, m_color) ); App.Draw(sf::Shape::Line (GAUCHE_LETTRE, BAS_LETTRE, DROITE_LETTRE, BAS_LETTRE, EPAISSEUR, m_color, 0, m_color) ); break; case 3: App.Draw(sf::Shape::Line (GAUCHE_LETTRE, HAUT_LETTRE, DROITE_LETTRE, HAUT_LETTRE, EPAISSEUR, m_color, 0, m_color) ); App.Draw(sf::Shape::Line (DROITE_LETTRE, HAUT_LETTRE, DROITE_LETTRE, BAS_LETTRE, EPAISSEUR, m_color, 0, m_color) ); App.Draw(sf::Shape::Line (DROITE_LETTRE, BAS_LETTRE, GAUCHE_LETTRE, BAS_LETTRE, EPAISSEUR, m_color, 0, m_color) ); App.Draw(sf::Shape::Line (DROITE_LETTRE, MILIEU_LETTRE, GAUCHE_LETTRE, MILIEU_LETTRE, EPAISSEUR, m_color, 0, m_color) ); break; case 4: App.Draw(sf::Shape::Line (GAUCHE_LETTRE, HAUT_LETTRE, GAUCHE_LETTRE, MILIEU_LETTRE, EPAISSEUR, m_color, 0, m_color) ); App.Draw(sf::Shape::Line (GAUCHE_LETTRE, MILIEU_LETTRE, DROITE_LETTRE, MILIEU_LETTRE, EPAISSEUR, m_color, 0, m_color) ); App.Draw(sf::Shape::Line (DROITE_LETTRE, HAUT_LETTRE, DROITE_LETTRE, BAS_LETTRE, EPAISSEUR, m_color, 0, m_color) ); break; case 5: App.Draw(sf::Shape::Line (DROITE_LETTRE, HAUT_LETTRE, GAUCHE_LETTRE, HAUT_LETTRE, EPAISSEUR, m_color, 0, m_color) ); App.Draw(sf::Shape::Line (GAUCHE_LETTRE, HAUT_LETTRE, GAUCHE_LETTRE, MILIEU_LETTRE, EPAISSEUR, m_color, 0, m_color) ); App.Draw(sf::Shape::Line (GAUCHE_LETTRE, MILIEU_LETTRE, DROITE_LETTRE, MILIEU_LETTRE, EPAISSEUR, m_color, 0, m_color) ); App.Draw(sf::Shape::Line (DROITE_LETTRE, MILIEU_LETTRE, DROITE_LETTRE, BAS_LETTRE, EPAISSEUR, m_color, 0, m_color) ); App.Draw(sf::Shape::Line (DROITE_LETTRE, BAS_LETTRE, GAUCHE_LETTRE, BAS_LETTRE, EPAISSEUR, m_color, 0, m_color) ); break; case 6: App.Draw(sf::Shape::Line (DROITE_LETTRE, HAUT_LETTRE, GAUCHE_LETTRE, HAUT_LETTRE, EPAISSEUR, m_color, 0, m_color) ); App.Draw(sf::Shape::Line (GAUCHE_LETTRE, HAUT_LETTRE, GAUCHE_LETTRE, BAS_LETTRE, EPAISSEUR, m_color, 0, m_color) ); App.Draw(sf::Shape::Line (GAUCHE_LETTRE, BAS_LETTRE, DROITE_LETTRE, BAS_LETTRE, EPAISSEUR, m_color, 0, m_color) ); App.Draw(sf::Shape::Line (DROITE_LETTRE, BAS_LETTRE, DROITE_LETTRE, MILIEU_LETTRE, EPAISSEUR, m_color, 0, m_color) ); App.Draw(sf::Shape::Line (DROITE_LETTRE, MILIEU_LETTRE, GAUCHE_LETTRE, MILIEU_LETTRE, EPAISSEUR, m_color, 0, m_color) ); break; case 7: App.Draw(sf::Shape::Line (GAUCHE_LETTRE, HAUT_LETTRE, DROITE_LETTRE, HAUT_LETTRE, EPAISSEUR, m_color, 0, m_color) ); App.Draw(sf::Shape::Line (DROITE_LETTRE, HAUT_LETTRE, DROITE_LETTRE, BAS_LETTRE, EPAISSEUR, m_color, 0, m_color) ); break; case 8: App.Draw(sf::Shape::Line (GAUCHE_LETTRE, HAUT_LETTRE, DROITE_LETTRE, HAUT_LETTRE, EPAISSEUR, m_color, 0, m_color) ); App.Draw(sf::Shape::Line (GAUCHE_LETTRE, MILIEU_LETTRE, DROITE_LETTRE, MILIEU_LETTRE, EPAISSEUR, m_color, 0, m_color) ); App.Draw(sf::Shape::Line (GAUCHE_LETTRE, BAS_LETTRE, DROITE_LETTRE, BAS_LETTRE, EPAISSEUR, m_color, 0, m_color) ); App.Draw(sf::Shape::Line (GAUCHE_LETTRE, HAUT_LETTRE, GAUCHE_LETTRE, BAS_LETTRE, EPAISSEUR, m_color, 0, m_color) ); App.Draw(sf::Shape::Line (DROITE_LETTRE, HAUT_LETTRE, DROITE_LETTRE, BAS_LETTRE, EPAISSEUR, m_color, 0, m_color) ); break; case 9: App.Draw(sf::Shape::Line (GAUCHE_LETTRE, BAS_LETTRE, DROITE_LETTRE, BAS_LETTRE, EPAISSEUR, m_color, 0, m_color) ); App.Draw(sf::Shape::Line (DROITE_LETTRE, BAS_LETTRE, DROITE_LETTRE, HAUT_LETTRE, EPAISSEUR, m_color, 0, m_color) ); App.Draw(sf::Shape::Line (DROITE_LETTRE, HAUT_LETTRE, GAUCHE_LETTRE, HAUT_LETTRE, EPAISSEUR, m_color, 0, m_color) ); App.Draw(sf::Shape::Line (GAUCHE_LETTRE, HAUT_LETTRE, GAUCHE_LETTRE, MILIEU_LETTRE, EPAISSEUR, m_color, 0, m_color) ); App.Draw(sf::Shape::Line (GAUCHE_LETTRE, MILIEU_LETTRE, DROITE_LETTRE, MILIEU_LETTRE, EPAISSEUR, m_color, 0, m_color) ); break; default: break; } } #endif // CFPS_HPP_INCLUDED
Eh oui, comme vous le voyez, on utilise de simples shapes openGL :)
Il suffit alors de créer une instance dans son programme et d'appeler Draw à chaque tour de boucle !