Biblioteki C++
08. Zegar i Odmierzanie Czasu
[lekcja] Często zachodzi potrzeba odmierzania czasu w programach, a w szczególności w grach komputerowych. Pomiar czasu jest niezbędny między innymi do tworzenia animacji, obsługi opóźnień, odmierzania czasu rozgrywki, wyświetlania liczników czy wykonywania określonych akcji w regularnych odstępach czasu.
Biblioteka SFML udostępnia do tego celu klasy
sf::Clock oraz
sf::Time. Klasa
sf::Clock działa jak stoper - pozwala mierzyć czas, jaki upłynął od momentu jej utworzenia lub ostatniego wyzerowania. Z kolei klasa
sf::Time przechowuje zmierzoną wartość czasu i umożliwia jej wygodne odczytanie w sekundach, milisekundach lub mikrosekundach. Dzięki tym klasom możemy w prosty sposób kontrolować upływ czasu w naszych aplikacjach.
#include <SFML/Graphics.hpp>
#include <iostream>
int main() {
sf::RenderWindow window = sf::RenderWindow( sf::VideoMode( sf::Vector2u( 800u, 600u ) ), "Clock and Time" );
sf::Font font;
if( !font.openFromFile( "C:\\Windows\\Fonts\\arial.ttf" ) ) {
std::cerr << "Failed to load font!" << std::endl;
return 0;
}
sf::Text textSeconds( font, "0 seconds", 47u );
textSeconds.setFillColor( sf::Color::White );
textSeconds.setOutlineThickness( 4.f );
textSeconds.setOutlineColor( sf::Color( 127, 127, 127 ) );
textSeconds.setPosition( sf::Vector2f( 100.f, 100.f ) );
sf::Text textMiliSeconds( font, "0 miliseconds", 47u );
textMiliSeconds.setFillColor( sf::Color::White );
textMiliSeconds.setOutlineThickness( 4.f );
textMiliSeconds.setOutlineColor( sf::Color( 127, 127, 127 ) );
textMiliSeconds.setPosition( sf::Vector2f( 100.f, 200.f ) );
sf::Text textMicroSeconds( font, "0 microseconds", 47u );
textMicroSeconds.setFillColor( sf::Color::White );
textMicroSeconds.setOutlineThickness( 4.f );
textMicroSeconds.setOutlineColor( sf::Color( 127, 127, 127 ) );
textMicroSeconds.setPosition( sf::Vector2f( 100.f, 300.f ) );
sf::Clock clock; while( window.isOpen() ) {
while( const std::optional event = window.pollEvent() ) {
if( event->is < sf::Event::Closed >() )
window.close();
}
sf::Time time = clock.getElapsedTime(); std::stringstream seconds;
seconds << std::fixed << std::setprecision( 2 ) << time.asSeconds(); textSeconds.setString( seconds.str() + " seconds" );
textMiliSeconds.setString( std::to_string( time.asMilliseconds() ) + " miliseconds" );
textMicroSeconds.setString( std::to_string( time.asMicroseconds() ) + " microseconds" );
window.clear( sf::Color::Black ); window.draw( textSeconds ); window.draw( textMiliSeconds ); window.draw( textMicroSeconds ); window.display(); }
return 0;
}
Wynik programu:
Wszystkie teksty są chronione prawami autorskimi. Kopiowanie lub rozpowszechnianie treści poza niniejszym serwisem
jest zabronione.
Powyższe ograniczenie nie dotyczy autora opracowania, któremu przysługuje prawo do rozpowszechniania własnego tekstu wedle własnego uznania.