У меня есть анимация, которую нужно анимировать. У меня есть пример кода
void CAnimationEditor::OnTimer(UINT nIDEvent)
{
if (nIDEvent == 2)
{
if (_flAnimPos >= 1.0f)
_flAnimPos = 0.0f;
std::chrono::duration<float> elapsed_seconds = std::chrono::steady_clock::now() - _start;
float time = elapsed_seconds.count();
float rate = (float)_FPS / m_pAnimation->GetFramesCount();
_flAnimPos += time * rate;
if (_flAnimPos >= 1.0f)
_flAnimPos = 0.0f;
m_pAnimation->Update();
m_oglAnimationPreview.Draw();
_start = std::chrono::steady_clock::now();
}
CDialog::OnTimer(nIDEvent);
}
Я нажимаю на флажок и устанавливаю таймер
SetTimer(2, 0, NULL);
Правильный способ анимации - «заполнить» _flAnimPos
от 0
до 1
за 1.0f / rate
секунд.
Например, у меня есть анимация, которая состоит из 8 кадров. Если для _FPS
установлено значение 16
, анимация должна пройти полный цикл за 0.5
секунд.