我正在尝试使用 SFML 限制我的游戏循环 fps,但它无法正常工作。
如果我除以 60/1000,结果不应该是每帧获得 60 FPS 的时间吗?
我输入了 60 但只得到了 33 有谁知道我哪里错了?
Here is my header
class Game
{
//..
sf::Clock deltaTimeClock;
float deltaTime;
const float frameTime = 60.0f/ 1000.0f;
bool aSecondPassed();
float currentFPS = 0;
sf::Clock second;
//..
}
我的实现
//...
void Game::updateDeltaTime()
{
this->deltaTime = (this->deltaTimeClock.restart().asSeconds());
}
//...
void Game::run()
{
while (this->window->isOpen())
{
this->showFPS();
this->tick();
this->render();
while (deltaTime < this->frameTime)
{
this->deltaTime = this->deltaTimeClock.getElapsedTime().asSeconds();
}
this->updateDeltaTime();
}
}
通过将循环条件更新为
获得稳定的 60 fpsthis->deltaTimeClock.getElapsedTime().asSeconds() < this->frameTime
但是我会更多地研究这个主题,也许有更好的方法来实现这一点。谢谢大家的帮助。
尝试这个方法。只需将其插入您的游戏循环即可
// frame is current deltaTime and LastFrameTime is the previous frame delta time.
// Speed is the max number of frames you want to allow
if ((frame - LastFrameTime) / 1000 < 1 / speed) {
return;
}