Я пытаюсь создать простую игру в 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;
};
Проблема в том, что когда я печатаю значение delta, я получаю значения, такие как: 600, 1200, 1900, 150, 500 и т. Д. Сначала я думал, что я делаю что-то не так внутри world.update () или world.render (), который замедляет вниз по игре, поэтому я их убрал. Тем не менее, я все еще получал высокие значения времени дельты. Что-то не так с логикой расчета времени дельты? Я что-то там упускаю?
РЕДАКТИРОВАТЬ: Удаление звонка SDL_Delay()
не решить проблему.
Задача ещё не решена.
Других решений пока нет …