FPS 计时器不工作

FPS Timer Not Working

我在 Visual studio 2015 年使用 c++ 和 sdl-2 创建了一个游戏,我目前正在实现一个 fps 计时器,但它不工作。基本FPS定时器代码:

#include <SDL.h>
#include <Camera.h>

int main()
{

//create objects + camera

float frameTime = 0.0f;
int prevTime = 0;
int currentTime = 0;
float deltaTime = 0.0f;

    while (isRunning)
    {

    SDL_Event ev;

    keyState = SDL_GetKeyboardState(NULL);

    prevTime = currentTime;
    currentTime = SDL_GetTicks();
    deltaTime = (currentTime - prevTime) / 1000.0f;

    frameTime += deltaTime;

        if (frameTime >= 0.25f)
        {

            if (keyState[SDL_SCANCODE_W] && !FreeRoam)
            {
                Object1.GetPos().z = (Object2.GetPos().z + 1);
                camera.MoveForward(1);
            }
            //render
        }
    }

return 0;
}

CodingMadeEasy 直接从 this 视频中截取了有问题的 FPS 计时器。问题是 fps 计时器就像不存在一样,那么我该如何解决这个问题?

您似乎没有在帧更新后将 frameTime 重置为 0。

阅读你的代码。您正在计算两条线之间的时间:

prevTime = currentTime;
currentTime = SDL_GetTicks();
deltaTime = (currentTime - prevTime) / 1000.0f;

这没有任何意义。你想要两个循环迭代之间的时间,所以你必须在循环的边界中拆分这些行:

while (isRunning)
{
    prevTime = currentTime; // Right here, in the loop's beguining

    SDL_Event ev;

    keyState = SDL_GetKeyboardState(NULL);

    if (frameTime >= 0.25f)
    {

        if (keyState[SDL_SCANCODE_W] && !FreeRoam)
        {
            Object1.GetPos().z = (Object2.GetPos().z + 1);
            camera.MoveForward(1);
        }
        //render
    }

    //End of the loop

    currentTime = SDL_GetTicks();
    deltaTime = (currentTime - prevTime) / 1000.0f;

    frameTime += deltaTime;
}