我正在为学校项目制作 2D 游戏。我老师给的模板效果很好,但是我想替换代码中一个非常非常愚蠢的东西。在代码中,他调用了 20 次重方法来减慢游戏速度。而不是这样做,我想检查是否应该处理下一帧。
游戏是模板命名空间内的一个对象。这个命名空间有一个无限循环,它调用游戏滴答方法并交换帧缓冲区。
在这个模板中,我Game->Tick()
用一个简单的 if 语句替换了 :
if (game->Ready(lastftime)) {
game->Tick();
}
lastframe
是上次调用和现在之间的时间差(以秒为单位)。我知道我可以利用这段时间来计算游戏中的动作,但这不是我现在想做的!
这是Ready
方法:
bool Game::Ready(float timedif) {
// Add time to framecounter
framecounter += timedif;
// Check if the counter over lapses the fps
if (framecounter > fps) {
// If so, substract the fps from the counter
while (framecounter > fps) {
framecounter -= fps;
}
m_Screen->Clear(0);
Draw();
return true;
}
// Frame is still inside the fps margin
return false;
}
fps
计算如下:fps = 1000.0f/60
我不知道为什么它不能以每秒 60 帧的速度运行,而且我 100% 确定它的调用次数不止于此(用 a 测试过printf
)。任何帮助,将不胜感激。