Я делаю iphone shmup и пытаюсь решить, какой тип игрового цикла использовать. Я хочу использовать либо полуфиксированный временной шаг, либо полностью фиксированный временной шаг.
С полуфиксированным временным шагом я сделаю ноль или более вызовов update (FIXED_INTERVAL) с последующим одним вызовом update (dt), где dt <= FIXED_INTERVAL за цикл игры. Насколько я понимаю, недостатки этого метода заключаются в том, что мою логику обновления физики (dt) будет труднее программировать, потому что я в основном должен принимать переменную dt для каждого обновления. А потом я также услышал, что каждый запуск моей игры будет немного отличаться из-за того, что значения с плавающей запятой не всегда одинаковы.
Затем с полностью фиксированным временным шагом я делаю ноль или более вызовов обновления (FIXED_INTERVAL) с последующим одним интерполяционным вызовом (dt / FIXED_INTERVAL), где dt <FIXED_INTERVAL на цикл игры.
Поэтому мне кажется, что мне действительно нужно принять важное решение: хочу ли я решить задачу внедрения обновления (dt) с переменной dt или я хочу решить задачу реализации интерполяции?
Теперь из того, что я прочитал, большинство людей говорят использовать полностью фиксированную и выполнять интерполяцию. Но когда я думаю о реализации интерполяции, мне кажется, что я буду намного сложнее, чем обновление (dt) с переменной dt. Это потому, что если я использую интерполяцию, я должен помнить как предыдущее состояние, так и текущее состояние. Поэтому, если я хочу использовать интерполяцию, мне нужно придумать дополнительный уровень косвенности, который абстрагирует все отдельные состояния игры. В то время как с полуфиксированным временным шагом, когда мне не нужно использовать интерполяцию, мне не нужно придумывать абстракцию игрового состояния, потому что всегда есть только одно игровое состояние, и это просто «глобальные массивы», которые представляют моих врагов и врага пули и т. д.
Итак, что является более практичным выбором: я должен реализовать его частично фиксированным, зная, что мои обновления физики могут усложниться с помощью переменной dt. Или я использую полностью исправленные и пытаюсь придумать абстракцию игрового состояния, чтобы я мог отслеживать предыдущее состояние и текущее состояние для выполнения интерполяции?