C++ 定时器问题

C++ 定时器问题,c++,game-engine,C++,Game Engine,当我在我的游戏引擎中读取对象时,我一直遇到一个与计时器相关的问题。勒平几乎是正确的,当我将勒平应用于移动或旋转的对象时,它很好,除了每隔几秒钟,似乎对象在继续平稳移动之前快速闪烁到其先前的位置 在窗口模式下运行引擎可以获得1500~fps的速度,但如果我在全屏运行时将vsync钳制到60 fps,则故障会更频繁地发生 我一直在试图找到一个关于勒平的好资源或解释,以及如何改进我所拥有的 为了计算刻度间隙,我使用: float World::GetTickGap() { float gap = (f

当我在我的游戏引擎中读取对象时,我一直遇到一个与计时器相关的问题。勒平几乎是正确的,当我将勒平应用于移动或旋转的对象时,它很好,除了每隔几秒钟,似乎对象在继续平稳移动之前快速闪烁到其先前的位置

在窗口模式下运行引擎可以获得1500~fps的速度,但如果我在全屏运行时将vsync钳制到60 fps,则故障会更频繁地发生

我一直在试图找到一个关于勒平的好资源或解释,以及如何改进我所拥有的

为了计算刻度间隙,我使用:

float World::GetTickGap()
{
float gap = (float) (TimeMs() - m_lastTick) / m_tickDelay;
return gap > 1.f ? 1.f : gap;
}
我的更新功能:

m_currentTick = TimeMs();
if(m_currentTick > m_lastTick+m_tickDelay)
{
    m_lastTick = m_currentTick;

            //Update actors

    }
float math::Lerp(float a, float b, float t)
{
return a + t*(b-a);
}
然后,当渲染每个演员时,我会给他们的位置之间的间隔

我的勒平功能:

m_currentTick = TimeMs();
if(m_currentTick > m_lastTick+m_tickDelay)
{
    m_lastTick = m_currentTick;

            //Update actors

    }
float math::Lerp(float a, float b, float t)
{
return a + t*(b-a);
}
以及正在调用的lerping函数的示例:

renderPosition.x = (math::Lerp(m_LastPosition.x, m_Position.x, tickDelay));
我不确定从哪里着手解决这个问题。据我所知,这是与功能的时间问题。然而,还有什么能导致性能以恒定速率小幅下降呢


对此问题的任何帮助都将不胜感激

我无法根据您发布的内容重建您的代码

但我记得,一般来说,每帧调用时间函数不止一次是个坏主意。 你好像是这么做的。试着想想这有什么影响


例如,这可能意味着更新Actors循环与tickGap间隔不同步,Actors第二次更新为0 gap。

1500或150?我不知道有多少显示器的刷新率高到足以正常显示1500 fps,更不用说人眼可以感知的速度了。最后一行的tickDelay与第一行的TickGap相同吗?显示器本身只能显示60次,但引擎告诉我,如果不使用vsync,它可以在一秒钟内绘制1500次世界。我确实希望当我开始渲染多个对象时,该数字会下降。tickDelay与TickGap相同,应该在引擎中进行更改,以最大限度地减少混乱。渲染在何时完成?是同一条线吗?或者在“ifm_currentTick>m_lastTick+m_tickDelay”之后处理?