如何限制游戏循环fps?

问题描述 投票:0回答:2

我正在尝试使用 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();
    }
}

c++ sfml game-loop
2个回答
0
投票

通过将循环条件更新为

获得稳定的 60 fps

this->deltaTimeClock.getElapsedTime().asSeconds() < this->frameTime

但是我会更多地研究这个主题,也许有更好的方法来实现这一点。谢谢大家的帮助。


0
投票

尝试这个方法。只需将其插入您的游戏循环即可

 // 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;
    }
© www.soinside.com 2019 - 2024. All rights reserved.