我有这个循环:
sf::Clock clock;
sf::Time timeSinceLastUpdate = sf::Time::Zero;
while (mWindow.isOpen())
{
processEvents();
timeSinceLastUpdate += clock.restart();
while (timeSinceLastUpdate > TimePerFrame)
{
timeSinceLastUpdate -= TimePerFrame;
processEvents();
update(TimePerFrame);
}
render();
}
在更新功能中,我这样做:
object.speed = object.speed * TimePerFrame.asSeconds();
然后运行一种方法:
sprite.move(cos(sprite.getRotation()*PI / 180) * speed, sin(sprite.getRotation()*PI / 180) * speed);
但是问题是精灵不会移动。当我不将速度乘以TimePerFrame.asSeconds()时,它确实会移动。我应该如何修复,以便一切正确?在哪里以及如何使用TimePerFrame变量?
最佳答案
object.speed = object.speed * TimePerFrame.asSeconds();
这条线会降低每帧的速度,直到它为0。
每当移动对象时,都需要按增量时间缩放移动距离。尝试这个:
float distance = speed * TimePerFrame.asSeconds();
sprite.move(cos(sprite.getRotation()*PI / 180) * distance, sin(sprite.getRotation()*PI / 180) * distance);