题
我明白为什么它确实是,但我真的没有对如何防止任何想法。所以情况是,每帧我通过一定的预定像素的动车。当我走慢或更快的计算机上会发生什么事是......嗯,我得到每秒少跌多帧所以汽车无论是移动慢或更快。我想知道我怎么能阻止。
我怀疑,我会使用任何图书馆同样的问题...这是我第一次做实时的东西一样。
解决方案
我怀疑你当前的代码看起来在某种程度上像这样
// to be called every frame
void OnEveryFrame()
{
MoveCar();
DrawCarToScreen();
}
但它应该是这样的:
// to be called - for example - 50 times per second:
void OnEveryTimerEvent()
{
MoveCar();
}
// to be called every frame
void OnEveryFrame()
{
LockTimerEvents();
DrawCarToScreen();
UnlockAndProcessOutstandingTimerEvents();
}
您必须建立一个根据定时器事件,当然。
其他提示
根据定时器和不帧率移动车。即汽车模型应该是独立的显示表示的。
可以通过使用精确计时器和矢量数学解决这个问题。
因此,对于参数的缘故让建议您的绘图代码可以在时间,例如任何一点被称为开的1秒或相隔3秒或0.02秒开。
走车的移动速度为40个像素的第二
因此,应该移动的像素的数目是(TIME_NOW - LAST_FRAME_TIME)* 40像素
在运动应该由一个“真实”时间延迟被约束,即你车将在x处的像素的每时间片的速度移动。
读取实时时钟,并移动车的经过时间的适当距离。这可能看起来有点“生涩”如果计算机太慢,但使轿厢速度独立于CPU速度的。
您需要以盖住帧率为每秒X帧(60帧是最常见的)。这是大多数多媒体框架,包括SFML一个共同的特点。对于SFML我看看橱窗/ RenderWindow的方法 SetFramerateLimit(unsigned int类型极限)。
您需要解决您的时间步。基本上,每一帧你动车是变化的基础上多少时间自上次更新呼叫实际经过的距离。这样,你得到正确的速度,无论帧率。
您有动车和图纸之前保存的时间。结果 所有的计算后保存时间。结果 通过Npixels /秒的移动你的车
不隶属于 StackOverflow