C++ 在定时器类中设置速度系数?

C++ 在定时器类中设置速度系数?,c++,sdl,C++,Sdl,我有以下计时器类: class Timer { private: unsigned int curr,prev; float factor; float delta; public: Timer(float FrameLockFactor) { factor = FrameLockFactor; } ~Timer() { } void Update() {

我有以下计时器类:

class Timer
{
    private:
    unsigned int curr,prev;
    float factor;
    float delta;

    public:
    Timer(float FrameLockFactor)
    {
        factor = FrameLockFactor;
    }

    ~Timer()
    {

    }

    void Update()
    {
        curr = SDL_GetTicks();
        delta = (curr - prev) * (1000.f / factor);
        prev = curr;
    }

    float GetDelta() 
    {
        return delta;
    }
};
我是这样用的:

//Create a timer and lock at 60fps
Timer timer(60.0f);

while()
{
    float delta;
    float velocity = 4.0f;

    timer.Update();

    delta = timer.GetDelta();

    sprite.SetPosition( sprite.GetVector() + Vector2(0.0,velocity * delta) );
    sprite.Draw();
}
但是有一个大问题:我的游戏运行速度太慢,对于一个本应以每秒60帧的速度运行的程序来说,同样的测试代码在不使用帧独立运动时运行平稳,所以我的代码一定有问题


有什么帮助吗?

我真的不明白您想用代码做什么。尤其是直线
delta=(curr-prev)*(1000.f/系数)在我看来没有意义

如果我理解正确,您正在尝试计算自上次更新以来经过的时间,并将其转换为每帧毫秒。你用的是什么单位

我不知道
SDL_GetTicks()返回了什么。这是返回的处理器或实际时钟滴答数吗?如果它返回的是真实的时钟信号,
(curr prev)
部分通常为零,因为您必须对每帧执行多个更新才能工作

如果它没有返回真正的时钟信号,为什么要乘以
1000f
。这个因素从何而来


对于这样的代码,处理舍入错误通常是非常重要的,所以我猜您的问题就在这方面。尽管没有额外的信息,我无法告诉您实际的问题可能是什么。

如果
delta
应该是一个帧数,那么它不应该计算为

delta = (curr - prev) * (factor / 1000.f);

Im将所有速度与增量值相乘,以便通过使用以下公式实现帧独立运动:(currTicks PrevTicks)/1000.0f。但是现在我也希望能够通过一个可变因子来限制帧,比如说,60fps。谢谢,这样更好。尽管经过一些研究,我发现在游戏中使用固定帧速率确实比使用独立于帧的帧速率要好。