Пытаясь получить правильное время дельты

Я пытаюсь создать простую игру в 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() не решить проблему.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]