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。谢谢,这样更好。尽管经过一些研究,我发现在游戏中使用固定帧速率确实比使用独立于帧的帧速率要好。