我有这个循环:

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);

09-06 21:34