У меня интересная, но странная проблема с моим таймером игр. Кажется, что миллисекунды прекрасно работают. Однако, когда я пытаюсь применить std::chrono::seconds
, я неожиданно получаю 0.000000
при кастинге на поплавок.Chrono Timer Неправильно преобразовывает секунды
Мой таймер следующим образом:
#include <iostream>
#include <time.h>
#include <chrono>
class Timer
{
public:
typedef std::chrono::high_resolution_clock Time;
typedef std::chrono::milliseconds ms; //<--If changed to seconds, I get 0.00000
typedef std::chrono::duration<float> fsec;
std::chrono::high_resolution_clock::time_point m_timestamp;
float currentElapsed;
Timer()
{
m_timestamp = Time::now();
}
float getTimeElapsed()
{
return currentElapsed;
}
void Tick()
{
currentElapsed = std::chrono::duration_cast<ms>(Time::now() - m_timestamp).count();
m_timestamp = Time::now();
}
public:
//Singleton stuff
static Timer* Instance();
static void Create();
};
Таймер получает галочкой раз за кадр. Так, например, я обычно получаю около 33 мс за кадр. 33ms/1000 = 0.033s
секунд, поэтому должно быть достаточно места для хранения.
Любые идеи о том, что может произойти?
Любая помощь очень ценится!
EDIT: К сожалению, секунды, миллисекунды не
Где именно отображается '0.000'? Вы говорите, что бросили на поплавок - где? –
currentElapsed - это float, поэтому std :: chrono :: duration. Насколько я понимаю, внутренний формат не является плавающим. CurrentElapsed переменная заканчивается 0.0f. Если миллисекунды, то возвращается ненулевое значение. –