В быстро приближающейся канонической статье Исправьте свой временной шаг! , Гленн Филдер рассматривает многочисленные способы решения этой проблемы. Хотя статья в основном посвящена физике, ключевые моменты применимы к любой системе, которая представляет собой функцию времени, то есть вещей, связанных с движущимися вещами.
Краткое содержание этой статьи (которую стоит прочитать) таково:
Вы можете сделать свою физику детерминированной (ну, столько, сколько можно достичь с помощью несовершенного ввода), используя дискретные физические временные шаги. Это выглядит так:
- Визуализируйте как можно быстрее
- Передайте дельту времени, которая показывает, сколько шагов предыдущий предпринял этот кадр
- Время дельта процесса по модулю временного шага число физических шагов
- Сохраните остаток дельты, который вы не смогли обработать, в аккумуляторе
Этот аккумулятор добавляется во временной буфер следующего кадра. Это требует некоторой тонкой настройки, так что временные скачки задержки, например, из-за быстро вращающийся игрок (который требует большого количества определения видимости в течение долгого времени), не заканчивает тем, что наложил Вас на неизбежный долговой долг. Если вы хотите разумно защититься от такого происшествия, вы можете посмотреть на опасные уровни накопленного времени, на которые вы могли бы ответить, возможно, отбросив видеокадр.
Еще одним преимуществом использования дискретных временных шагов является то, что они хорошо себя ведут в многопользовательских играх. Если у вас есть авторитетный сервер или узел в одноранговой конфигурации, сервер может убедиться, что все физические симуляции клиентов выполняются на одной и той же временной шкале. Блоки дискретного времени также упрощают работу в многопользовательском режиме с откатом.
Edit:
Отказ от ответственности: я никогда не писал программ для реального времени, работал только в компании, которая имела!
В ответ на действительно реальное программное обеспечение реального времени, вряд ли кто-то создал игру, которая может быть квалифицирована как эта, по крайней мере, в программном обеспечении. (Я не уверен, как можно квалифицировать игры на ПЗУ или игры, которые не работают под операционной системой хоста?) Хотя в качестве вашего примера можно привести попытку с программным обеспечением реального времени, большинством программного обеспечения реального времени. проходит период сертификации, в котором определяется максимальное количество времени, затрачиваемое на инструкцию или на логический блок операции. Игры могут приближаться к этому в некотором смысле, когда, например, лицензиары платформ предъявляют требования (как я полагаю, XBLA) относительно минимальных 30 кадров в секунду или аналогичных. Тем не менее, эти сертификаты, как правило, устанавливаются через период испытаний, а не путем математического доказательства.