我有一个需要动画的动画。我有一些代码示例
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
秒内经历一个完整的周期。
答案 0 :(得分:0)
我找到了解决方案。时间点传递不正确。正确的是:
if (nIDEvent == 2)
{
_start = std::chrono::steady_clock::now();
std::chrono::duration<float> elapsed_seconds = _start - _last;
float time = elapsed_seconds.count();
float rate = (float)_FPS / m_pAnimation->GetFramesCount();
_flAnimPos += time * rate;
if (_flAnimPos > 1.0f)
_flAnimPos = fmod(_flAnimPos, 1.0f);
m_pAnimation->Update();
m_oglAnimationPreview.Draw();
_last = _start;
}