我正在尝试用SDL创建一个简单的游戏,我目前停留在时间差上。这是主循环:
bool quit = false;
DeltaClock deltaclock;
// ...
while ( !quit ) {
while ( SDL_PollEvent(&evt) != 0 ) {
quit = evt.type == SDL_QUIT;
// handle the input
}
double delta = deltaclock.tick();
SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255);
SDL_RenderClear(renderer);
world.update(delta);
world.render();
SDL_RenderPresent(renderer);
SDL_Delay(1000/60 - delta);
}
// ...
这是DeltaClock类:
class DeltaClock {
public:
DeltaClock() {
curr = SDL_GetPerformanceCounter();
last = 0;
}
double tick() {
last = curr;
curr = SDL_GetPerformanceCounter();
return ((curr - last) * 1000 / static_cast<double>(SDL_GetPerformanceFrequency()));
}
private:
Uint64 curr;
Uint64 last;
};
问题是当我打印增量值时,我得到的值是:600、1200、1900、150、500等。起初,我虽然在world.update()或world.render( ),这会减慢游戏的速度,因此我将其删除。但是,我仍然获得较高的增量时间值。计算增量时间的逻辑有什么问题吗?我在那里缺少什么吗?
编辑:删除对SDL_Delay()
的呼叫并不能解决问题。