在计时器类中设置速度系数
Setting speed factor in a timer class?
我有以下计时器类:
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
应该是帧数,它不应该被计算为吗
delta = (curr - prev) * (factor / 1000.f);
我真的不明白你想用代码做什么。尤其是在我看来,delta = (curr - prev) * (1000.f / factor);
这条线没有意义。
如果我理解正确,您将尝试计算自上次更新以来经过了多少时间,并将其转换为每帧毫秒。你用的是什么单位?
我不知道SDL_GetTicks();
返回了什么。这是返回的处理器或实际时钟信号的数量吗?如果它返回真实的时钟信号,(curr-prev)
部分通常为零,因为您必须在每帧进行多次更新才能正常工作。
如果它没有返回真实的时钟信号,为什么要乘以1000f
。这个因素是从哪里来的?
对于这样的代码,处理舍入错误通常是非常重要的,所以我猜你的问题就在这个领域。虽然没有额外的信息,我无法告诉你实际的问题可能是什么。
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 在C++/Linux中设置单调时钟的一些技巧
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 嵌套在类中时无法设置成员数据
- 需要帮助设置在C++中使用的Potrace
- 如何在自删除后将对象设置为nullptr
- 将指针设置为"nullptr"并不能防止双重删除?
- 为什么在读取文件大小时文件IO速度会发生变化
- 如何在Ubuntu中使用cmake设置qt4
- ld:bind_at_load和-bitcode_bundle(Xcode设置ENABLE_bitcode=YES)不能
- 如何在boost beast http请求中设置http头
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- 如何将这个C++哈希表转换为动态扩展和收缩,而不是使用硬设置的最大值
- 计算车辆之间的距离并设置速度,使距离保持不变,例如 5 米
- 在Webots C++中将速度设置为差速轮的问题
- 如何设置ZERO-MQ架构来处理不同速度的工人
- 是否有一个 GNU C 编译器选项可以生成运行速度更快但精度低于默认设置的浮点程序
- 在计时器类中设置速度系数
- Cocos2D/Box2d只在一个轴上设置速度
- 为什么设置 CPU 关联会使线程运行速度变慢