我目前正在使用SFML制作游戏,但是我一直在不受帧率限制的情况下陷入游戏中。现在,我弄清楚如何在所有计算机上获得一致帧率的唯一方法是使用

window.setFramerateLimit(30);

我想找到一种没有帧速率上限的方法,以便在性能更好的计算机上看起来更好,这样,如果有人计算机速度真的很慢,他们仍然可以玩游戏。什么是做到这一点的最佳方法。

最佳答案

您应该将自上一帧以来耗时传递给需要绘制的对象,然后计算该对象必须移动的空间,如下所示:

sf::Clock clock;
int speed = 300;


//Draw func that should be looped
void Draw()
{
    sf::Time elapsedTime = clock.restart();
    float tempSpeed = elapsedTime.asSeconds() * speed;
    drawnObject.move(tempSpeed, 0);
    drawnObject.draw(window);
}

这样,无论FPS大小如何,“drawnObject”都将每秒向右移动300(像素?)

关于c++ - 无帧速率限制的移动C++ SFML,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18306101/

10-12 16:06