Реализация шапки SDL FrameRate - PullRequest
0 голосов
/ 16 мая 2018

Я действительно новичок в разработке игр, и я уже создал несколько программ, использующих SDL2.Частота кадров не была большой проблемой, так как я никогда не планировал выпуск этих программ и просто использовал SDL_RENDER_PRESENTVSYNC, чтобы ограничить частоту кадров до 60 (частота обновления моего монитора).Теперь я хочу создать приложение, которое могу отправить друзьям, и я хотел бы знать, насколько хороша моя реализация с частотой кадров.

unsigned int a = SDL_GetTicks();
unsigned int b = SDL_GetTicks();
double delta = 0;

while (running)
{
    a = SDL_GetTicks();
    delta += a - b;

    if (delta > 1000/60.0)
    {
        std::cout << "fps: " << 1000 / delta << std::endl;

        Update();
        Render();
        delta = 0;
    }

    b = SDL_GetTicks();
}

У меня хорошее чувство, что я ужасно испортил свои вычисленияно многие из других реализаций, которые я нашел в Интернете, обычно кажутся довольно длинными.Если возможно, я бы хотел сохранить реализацию рамки в игровом цикле и сделать ее максимально простой.Любая помощь приветствуется!

1 Ответ

0 голосов
/ 11 февраля 2019

Вы должны поместить строку b = SDL_GetTicks(); внутри оператора if и перед Update();delta = a - b вместо delta += a - b.И вы также можете использовать b=a вместо вызова функции SDL_GetTicks().

while (running)
{
    a = SDL_GetTicks();
    delta = a - b;

    if (delta > 1000/60.0)
    {
        std::cout << "fps: " << 1000 / delta << std::endl;

        b = a;    

        Update();
        Render();
    }
}
...