Я понимаю, почему это делает это, но у меня действительно нет идеи того, как предотвратить это. Таким образом, сценарий, каждый кадр, я перемещаю автомобиль определенным из предопределенных пикселей. То, что происходит, - когда я иду на медленный или более быстрый компьютер... хорошо я добираюсь меньше или больше кадров в секунды, таким образом, автомобиль перемещается или медленнее или быстрее. Я задавался вопросом, как я мог предотвратить это.
Я подозреваю, что у меня была бы та же проблема при пользовании любой библиотекой... Это - мой первый раз, делая оперативный материал как этот.
Я подозреваю, что ваш текущий код выглядит как-то так
// to be called every frame
void OnEveryFrame()
{
MoveCar();
DrawCarToScreen();
}
Но он должен быть таким:
// to be called - for example - 50 times per second:
void OnEveryTimerEvent()
{
MoveCar();
}
// to be called every frame
void OnEveryFrame()
{
LockTimerEvents();
DrawCarToScreen();
UnlockAndProcessOutstandingTimerEvents();
}
Вы, конечно, должны настроить событие по таймеру.
Вы можете решить эту проблему, используя точные таймеры и векторные математические вычисления.
Итак, в качестве аргумента позвольте предположить, что ваш код рисования может быть вызван в любой момент времени, например С интервалом 1 секунда, или 3 секунды, или 0,02 секунды.
Возьмем скорость движения автомобиля 40 пикселей в секунду.
Следовательно, количество пикселей, которое он должен переместить, составляет (TIME_NOW - LAST_FRAME_TIME) * 40 пикселей.
Перемещайте машину по таймерам, а не по частоте кадров. т.е. модель автомобиля не должна зависеть от отображения на дисплее.
Движение должно быть ограничено «реальной» временной задержкой, то есть ваша машина будет двигаться со скоростью x пикселей за временной интервал.
Считайте показания часов реального времени и переместите машину на соответствующее расстояние в соответствии с истекшим временем.Это может выглядеть несколько «дерганно», если компьютер слишком медленный, но при этом скорость автомобиля не зависит от скорости процессора.
Вам необходимо исправить свой временной шаг . По сути, каждый кадр вы перемещаете автомобиль на расстояние, которое зависит от того, сколько времени фактически прошло с момента последнего вызова обновления. Таким образом, вы получите правильную скорость независимо от частоты кадров.
Вы должны сэкономить время перед перемещением машины и чертежей.
Экономьте время после всех расчетов.
Переместите машину со скоростью Npixels в секунду
Вам необходимо ограничить частоту кадров до X кадров в секунду (чаще всего 60 кадров в секунду). Это обычная функция в большинстве мультимедийных фреймворков, включая SFML. Для SFML я бы изучил метод Window / RenderWindow SetFramerateLimit (unsigned int Limit) .