[SFML 2.0] Dziwne wyniki sf::Clock
Ostatnio zmodyfikowano 2014-03-11 11:38
RazzorFlame Temat założony przez niniejszego użytkownika |
[SFML 2.0] Dziwne wyniki sf::Clock » 2014-03-10 17:31:54 Bez zbędnego gadania. Mam sobie sf::Clock. 450-540 (tyle FPS) na sekunde otrzymuje wynik że minęło 1-5 sekund. Daje to ok. 450-2200 sekund na prawdziwą sekunde. Pytam się co to ma znaczyć. Otrzymuje niewiarygodne wyniki z sf::Time::asMicroseconds (ok. 60x mniejsze niż powinno), sf::Time::asMilliseconds <- to już nawet nie chce komentować bo czasem dostaje 0, czasem 10-10000tys. Prosze oto kod: timer.hpp #ifndef TIMER_HPP_INCLUDED #define TIMER_HPP_INCLUDED
#include "main.hpp"
class Timer { static double * getSpeed(); sf::Clock m_Clock; double m_Time; char m_Status; static double * m_GameSpeed; public: Timer(); static void setSpeed( double * ); double getTime(); char getStatus(); void setStatus( char ); double restart(); void update( const double = * Timer::getSpeed() ); enum { Timing = 0, Paused = 1 }; };
#endif
timer.cpp #include "timer.hpp" double * Timer::m_GameSpeed = NULL; Timer::Timer() { m_Status = Timing; }
double Timer::getTime() { update(); return m_Time; } char Timer::getStatus() { return m_Status; } void Timer::setStatus( char status ) { m_Status = status; }
double * Timer::getSpeed() { return m_GameSpeed; } void Timer::setSpeed( double * speed ) { m_GameSpeed = speed; }
double Timer::restart() { m_Clock.restart(); double myTime = m_Time; m_Time = 0; return myTime; }
void Timer::update( const double speed ) { if( m_Status != Timing ) { m_Clock.restart(); return; } sf::Time tim = m_Clock.getElapsedTime(); cout << "Elapsed (seconds): " << tim.asSeconds() << endl; cout << "Elapsed (milliseconds): " << tim.asMilliseconds() << endl; cout << "Elapsed (microseconds): " << tim.asMicroseconds() << endl; m_Time += tim.asSeconds() * speed; m_Clock.restart(); }
wywołanie (w main.cpp): while( m_RW.isOpen() ) { sf::Event ev; while( m_RW.pollEvent( ev ) ) { if( ev.type == sf::Event::Closed ) m_RW.close(); } m_GameTimer.getTime(); m_RW.clear(); m_Map.draw( & m_RW ); m_RW.display(); m_GameTimer.restart(); loops++; if( fps.getElapsedTime().asSeconds() >= 1 ) { cout << "FPS: " << loops << endl; loops = 0; fps.restart(); } }
A o to log konsoli: Elapsed (microseconds): 37 Elapsed (seconds): 3.3e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 33 Elapsed (seconds): 5.2e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 52 Elapsed (seconds): 4.1e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 41 Elapsed (seconds): 3.7e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 37 Elapsed (seconds): 3.4e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 34 Elapsed (seconds): 3.9e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 39 Elapsed (seconds): 9.3e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 93 Elapsed (seconds): 3.5e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 35 Elapsed (seconds): 4e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 40 Elapsed (seconds): 3.2e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 32 Elapsed (seconds): 3.9e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 39 Elapsed (seconds): 3.9e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 39 Elapsed (seconds): 3.9e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 39 Elapsed (seconds): 3.7e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 37 Elapsed (seconds): 4e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 40 Elapsed (seconds): 3.9e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 39 Elapsed (seconds): 4.2e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 42 Elapsed (seconds): 4.1e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 41 Elapsed (seconds): 4.1e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 41 Elapsed (seconds): 3.2e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 32 Elapsed (seconds): 5.2e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 52 Elapsed (seconds): 3.3e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 33 Elapsed (seconds): 3.3e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 33 Elapsed (seconds): 4.4e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 44 Elapsed (seconds): 3.4e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 34 Elapsed (seconds): 3.8e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 38 Elapsed (seconds): 4e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 40 Elapsed (seconds): 4e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 40 Elapsed (seconds): 3.5e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 35 Elapsed (seconds): 4.2e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 42 Elapsed (seconds): 5.5e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 55 Elapsed (seconds): 3.3e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 33 Elapsed (seconds): 3.4e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 34 Elapsed (seconds): 3.4e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 34 Elapsed (seconds): 3.8e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 38 Elapsed (seconds): 3.8e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 38 Elapsed (seconds): 4.1e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 41 Elapsed (seconds): 3.7e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 37 Elapsed (seconds): 4e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 40 Elapsed (seconds): 3.7e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 37 Elapsed (seconds): 4.2e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 42 Elapsed (seconds): 4.9e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 49 Elapsed (seconds): 5e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 50 Elapsed (seconds): 3.3e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 33 Elapsed (seconds): 4e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 40 Elapsed (seconds): 3.5e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 35 Elapsed (seconds): 3.4e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 34 Elapsed (seconds): 3.8e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 38 Elapsed (seconds): 3.4e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 34 Elapsed (seconds): 4.9e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 49 Elapsed (seconds): 3.7e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 37 Elapsed (seconds): 3.4e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 34 Elapsed (seconds): 4e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 40 Elapsed (seconds): 4e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 40 Elapsed (seconds): 3.3e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 33 Elapsed (seconds): 4e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 40 Elapsed (seconds): 3.6e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 36 Elapsed (seconds): 4.1e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 41 Elapsed (seconds): 4.2e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 42 Elapsed (seconds): 3.4e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 34 Elapsed (seconds): 3.9e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 39 Elapsed (seconds): 3.8e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 38 Elapsed (seconds): 4.1e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 41 Elapsed (seconds): 3.5e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 35 Elapsed (seconds): 3.9e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 39 Elapsed (seconds): 4.2e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 42 Elapsed (seconds): 3.4e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 34 Elapsed (seconds): 3.3e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 33 Elapsed (seconds): 4e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 40 Elapsed (seconds): 4.5e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 45 Elapsed (seconds): 5.1e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 51 Elapsed (seconds): 3.7e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 37 Elapsed (seconds): 3.8e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 38 Elapsed (seconds): 4e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 40 Elapsed (seconds): 3.9e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 39 Elapsed (seconds): 3.5e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 35 Elapsed (seconds): 3.7e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 37 Elapsed (seconds): 0.00018 Elapsed (milliseconds): 0 Elapsed (microseconds): 180 Elapsed (seconds): 4e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 40 Elapsed (seconds): 3.5e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 35 Elapsed (seconds): 3.5e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 35 Elapsed (seconds): 3.9e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 39 Elapsed (seconds): 4e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 40 Elapsed (seconds): 4e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 40 Elapsed (seconds): 3.4e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 34 Elapsed (seconds): 3.3e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 33 Elapsed (seconds): 3.9e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 39 Elapsed (seconds): 5.2e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 52 Elapsed (seconds): 5.1e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 51 Elapsed (seconds): 3.2e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 32 Elapsed (seconds): 3.8e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 38 Elapsed (seconds): 4.4e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 44 Elapsed (seconds): 3.4e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 34 Elapsed (seconds): 4e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 40 Elapsed (seconds): 3.5e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 35 Elapsed (seconds): 3.4e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 34 Elapsed (seconds): 4.5e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 45 Elapsed (seconds): 4.1e-005 Elapsed (milliseconds): 0 Elapsed (microseconds): 41 FPS: 328 Elapsed (seconds): 0.000443 Elapsed (milliseconds): 0 Elapsed (microseconds): 443
Masakra, co to ma być? sf::Clock fps działa poprawnie. |
|
DejaVu |
» 2014-03-10 17:36:23 sf::Clock działa poprawnie - co najwyżej Ty masz błędy w swoim kodzie lub w obliczeniach. |
|
RazzorFlame Temat założony przez niniejszego użytkownika |
» 2014-03-10 17:37:34 No dobra, ale wskaż co jest źle bo wyświetlam wyniki bezpośrednio z m_Clock bez żadnych dodatkowych obliczeń. Kod jest aktualny, nie był zmieniany. |
|
DejaVu |
» 2014-03-10 17:38:49 m_Time += tim.asSeconds() * speed;
PS. Z Twojego opisu kompletnie nie wiadomo o co Ci chodzi. |
|
RazzorFlame Temat założony przez niniejszego użytkownika |
» 2014-03-10 17:43:03 Tak, tylko zobacz na log. Wyraźnie widać że coś jest nie tak. A tak poza tym, to te obliczenie jest jak najbardziej poprawne - wielokrotnie sprawdzałem zmienną speed - wynosi 1.0 tak jak wcześniej zdefiniowałem ją w innym pliku. Mój timer działa na takiej zasadzie żeby jak najczęściej go aktualizować: Gra działa na speedzie 1.0: Mija pare sekund, timer = (załóżmy) 11 (sekund). Teraz występuje cutscenka z prędkością 0.2 Timer nadal aktualizuje się co chwilkę więc dostaje poprawne dane o miniętym czasie gry, nie o czasie rzeczywistym.
Już wyjaśniam. Mam sobie timer - chce by liczył czas gry (ze względem na aktualną prędkość gry). Zwykły sf::Clock liczy prawdziwy czas. Po prostu jak najczęściej go aktualizuje by dane były jak najbardziej precyzyjne. Log pokazuje że ponad 400x na sekunde (tą prawdziwą) dostaje wynik od sf::Clock że minęło ok. 1-5 sekund. Tak jakbyś przyspieszył czas jakieś 1500x ;)
Edit: Co ciekawe ostatnie trzy pomiary są w miare dokładne (nie licząc milisekund bo wynoszą nadal 0...) |
|
DejaVu |
» 2014-03-10 18:03:51 Jak możesz dostawać czas ok 1-5 sekund?? Podaj konkretne wartości dla konkretnego czasu, bo z takim rozrzutem to niczego nie da się policzyć. |
|
RazzorFlame Temat założony przez niniejszego użytkownika |
» 2014-03-10 20:23:54 Widać wszystko w logu. Poza tym kiedy jest coś w tym dziwnego bo jeżeli chcę poruszać jakimś spritem z prędkością 250*timer.getTime() czyli 250px na sekunde, to porusza się on bardzo wolno. Zaobserwowałem też, że kiedy dodam do funkcji update z klasy Timer jakiegoś couta zaraz przed dodaniem do m_Time czasu to sprite posuwa się troszkę szybciej (nie mam pojęcia dlaczego, ale widziałem to na własne oczy!). Albo mi komputer się psuje albo jakieś cuda tu występują... |
|
DejaVu |
» 2014-03-10 21:11:48 Twój kod jest zły. Powinieneś co najwyżej zapisywać czas ostatniej klatki, zegara nie restartować i przed każdym kolejnym pomiarem liczyć: nowyCzas = clock.asSeconds(); float deltaT = nowyCzas - ostatni_czas; ostatni_czas = nowyCzas;
|
|
« 1 » 2 |