Задержка ввода SDL FPS - PullRequest
       16

Задержка ввода SDL FPS

3 голосов
/ 04 ноября 2011

Я использую SDL в своем игровом проекте, и я немного беспокоюсь о производительности своего ПК - она ​​слишком высокая или я просто бродил.

Дело в том, что когда я меняю координаты некоторого спрайта, когда клавиша на клавиатуре нажата, например, на 2 px, спрайт движется слишком быстро. И то же самое относится к скорости 1 px.

Обычно (в SFML) я делаю следующие изменения скорости: 1.f / App->GetTimeSinceLastFrame(), и это работает просто отлично! Но теперь я хочу использовать SDL. И я не могу выбрать задержки, потому что они не будут одинаковыми на разных ПК (и это наверняка очень уродливый способ) или преобразования с плавающей запятой по следующей причине.

Выполнение lastTicks = SDL_GetTicks() с последующим использованием 1.f / (float) SDL_GetTicks() - lastTicks() делает плохую работу - эта разница всегда ноль . Поэтому я либо ошибаюсь, либо время между двумя кадрами настолько мало, что оно округляется до 0.

Может кто-нибудь дать мне совет, что мне делать?

ПРИМЕЧАНИЕ: изменить SDL на xxx не очень хороший совет;)

1 Ответ

2 голосов
/ 04 ноября 2011

Нет смысла делать больше 60 кадров в секунду (частота обновления монитора). Вы только тратите время процессора. Позвоните SDL_Delay, если ваша игра работает слишком быстро.

    int delay=1000/maxFPS-SDL_GetTicks()+lastTicks;

    if(delay>0)
        SDL_Delay(delay);
...