Я роблю iphone shmup і намагаюся вирішити, який тип ігрового циклу використовувати. Я хочу використовувати або напівфіксований часовий крок, або повністю фіксований часовий крок.
З напівфіксованим часовим кроком я буду робити нульові або більше оновлення (FIXED_INTERVAL) дзвінків з подальшим одним викликом оновлення (dt), де dt <= FIXED_INTERVAL за цикл гри. Як я розумію, недоліки цього методу полягають у тому, що моя логіка оновлення фізики (dt) буде важче запрограмована, тому що я, як правило, повинен приймати змінну dt для кожного оновлення. А потім я також чув, що кожен запуск моєї гри буде дещо іншим, оскільки значення плаваючої крапки не будуть однаковими кожен раз.
Тоді з повністю фіксованим часовим кроком я здійснюю нульове або більше оновлення (FIXED_INTERVAL) дзвінків з подальшим одним інтерполяційним (dt / FIXED_INTERVAL) викликом, де dt <FIXED_INTERVAL за цикл гри.
Тож здається, що велике рішення, яке я насправді повинен прийняти, - це я хочу вирішити проблему впровадження оновлення (dt) зі змінною dt чи хочу вирішити проблему впровадження інтерполяції?
Тепер із того, що я прочитав, більшість людей говорять про використання повністю фіксованих даних та інтерполяцію. Але коли я думаю про реалізацію інтерполяції, то здається, що я був би набагато складнішим, ніж оновлення (dt) зі змінною dt. Це тому, що якщо я використовую інтерполяцію, я повинен пам'ятати і попередній стан, і поточний стан. Отже, якщо я хочу використовувати інтерполяцію, я повинен створити додатковий шар непрямості, який абстрагує всі стани гри. Тоді як із напівфіксованим часовим кроком, де мені не потрібно використовувати інтерполяцію, мені не потрібно придумувати абстракцію ігрового стану, тому що завжди є лише один ігровий стан, і це просто "глобальні масиви", які представляють моїх ворогів та ворога кулі тощо.
Отже, що є більш практичним вибором: чи реалізую це напівфіксовано, знаючи, що мої оновлення з фізики можуть ускладнитися змінною dt. Або я використовую повністю фіксовану форму і намагаюся придумати абстракцію ігрового стану, щоб я міг відслідковувати попередній стан та поточний стан для здійснення інтерполяції?