【问题标题】:gameloop framerate control issues游戏循环帧率控制问题
【发布时间】:2012-06-08 01:54:42
【问题描述】:

这让我发疯了,无论如何,这是一个平常的故事,试图在我的非常简单的游戏中保证在任何运行它的 Windows 机器上都具有相同的速度。我通过指定 1/60 值来做到这一点,然后确保框架无法运行,直到该值自上次调用以来及时通过。由于某种原因,我遇到的问题是 1/60 等于 30hz,我必须将其设置为 1/120 才能获得 60hz。它在 60hz 上也没有爆炸,它快一点。

如果我把它贴在这里,有人能告诉我他们是否发现有任何问题吗?或者更精确的方法?

float controlFrameRate = 1./60 ;

while (gameIsRunning)
{
    frameTime += (system->getElapsedTime()-lastTime);
    lastTime = system->getElapsedTime();

    if(frameTime > controlFrameRate)
    {
        gameIsRunning = system->update();
        
        //do stuff with the game

        frameTime = .0f;                   
    }
} 

【问题讨论】:

    标签: c++ frame-rate game-loop


    【解决方案1】:

    不要两次调用getElapsedTime,两次调用可能会有细微差别。相反,存储它的值,然后重用它。另外,不是将 frameTime 设置为 0,而是从中减去 controlFrameRate,这样,如果一帧需要更长的时间,下一帧将通过缩短一点来弥补。

    while (gameIsRunning)
    {
        float elapsedTime = system->getElapsedTime();
    
        frameTime += (elapsedTime-lastTime);
        lastTime = elapsedTime;
    
        if(frameTime > controlFrameRate)
        {
            gameIsRunning = system->update();
    
            //do stuff with the game
    
            frameTime -= controlFrameRate;
        }
    }
    

    我不确定您必须将速率设置为 1/120 的问题,您在这里使用什么计时 API?

    【讨论】:

    • dude 不仅提高了帧率,还解决了我遇到的 1./60!=60hz 问题,你真是个天才。干杯。
    • 在限制游戏逻辑的同时尽可能多地刷新图形是否明智?即在帧时间检查之外调用渲染器?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-06
    • 1970-01-01
    • 2016-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多