Игра гоночного автомобиля, автомобиль, перемещающийся быстрее в более быстрый компьютер

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

Я подозреваю, что у меня была бы та же проблема при пользовании любой библиотекой... Это - мой первый раз, делая оперативный материал как этот.

5
задан DogDog 4 February 2010 в 16:24
поделиться

8 ответов

Я подозреваю, что ваш текущий код выглядит как-то так

 // 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();
 }

Вы, конечно, должны настроить событие по таймеру.

12
ответ дан 18 December 2019 в 05:36
поделиться

Вы можете решить эту проблему, используя точные таймеры и векторные математические вычисления.

Итак, в качестве аргумента позвольте предположить, что ваш код рисования может быть вызван в любой момент времени, например С интервалом 1 секунда, или 3 секунды, или 0,02 секунды.

Возьмем скорость движения автомобиля 40 пикселей в секунду.

Следовательно, количество пикселей, которое он должен переместить, составляет (TIME_NOW - LAST_FRAME_TIME) * 40 пикселей.

3
ответ дан 18 December 2019 в 05:36
поделиться

Перемещайте машину по таймерам, а не по частоте кадров. т.е. модель автомобиля не должна зависеть от отображения на дисплее.

10
ответ дан 18 December 2019 в 05:36
поделиться

Движение должно быть ограничено «реальной» временной задержкой, то есть ваша машина будет двигаться со скоростью x пикселей за временной интервал.

2
ответ дан 18 December 2019 в 05:36
поделиться

Считайте показания часов реального времени и переместите машину на соответствующее расстояние в соответствии с истекшим временем.Это может выглядеть несколько «дерганно», если компьютер слишком медленный, но при этом скорость автомобиля не зависит от скорости процессора.

2
ответ дан 18 December 2019 в 05:36
поделиться

Вам необходимо исправить свой временной шаг . По сути, каждый кадр вы перемещаете автомобиль на расстояние, которое зависит от того, сколько времени фактически прошло с момента последнего вызова обновления. Таким образом, вы получите правильную скорость независимо от частоты кадров.

1
ответ дан 18 December 2019 в 05:36
поделиться

Вы должны сэкономить время перед перемещением машины и чертежей.
Экономьте время после всех расчетов.
Переместите машину со скоростью Npixels в секунду

0
ответ дан 18 December 2019 в 05:36
поделиться

Вам необходимо ограничить частоту кадров до X кадров в секунду (чаще всего 60 кадров в секунду). Это обычная функция в большинстве мультимедийных фреймворков, включая SFML. Для SFML я бы изучил метод Window / RenderWindow SetFramerateLimit (unsigned int Limit) .

2
ответ дан 18 December 2019 в 05:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: