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;
}
我在 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;
}