Robię shmup na iPhone'a i próbuję zdecydować, jakiego rodzaju pętli gry użyć. Chcę użyć częściowo ustalonego timestep lub w pełni ustalonego timepep.
Z częściowo ustalonym czasem wykonania wykonam zero lub więcej wywołań aktualizacji (FIXED_INTERVAL), a następnie jedno wywołanie aktualizacji (dt), gdzie dt <= FIXED_INTERVAL na pętlę gry. Jak rozumiem, wady tej metody polegają na tym, że moja logika aktualizacji fizyki (dt) będzie trudniejsza do zaprogramowania, ponieważ zasadniczo muszę przyjmować zmienną dt dla każdej aktualizacji. A potem słyszałem również, że każdy przebieg mojej gry będzie nieco inny, ponieważ wartości zmiennoprzecinkowe nie będą takie same za każdym razem.
Następnie z całkowicie ustalonym czasem wykonania robię zero lub więcej wywołań aktualizacji (FIXED_INTERVAL), a następnie jedno wywołanie interpolacji (dt / FIXED_INTERVAL), gdzie dt <FIXED_INTERVAL na pętlę gry.
Wydaje się więc, że najważniejszą decyzją, którą naprawdę muszę podjąć, jest: czy chcę zmierzyć się z wyzwaniem związanym z wdrożeniem aktualizacji (dt) ze zmienną dt, czy też z wyzwaniem polegającym na wdrożeniu interpolacji?
Teraz, z tego co przeczytałem, większość ludzi mówi, aby używać w pełni ustalonych i interpolować. Ale kiedy myślę o implementacji interpolacji, wydaje mi się, że byłbym o wiele bardziej złożony niż aktualizacja (dt) ze zmienną dt. Jest tak, ponieważ jeśli używam interpolacji, muszę pamiętać zarówno stan poprzedni, jak i stan obecny. Więc jeśli chcę użyć interpolacji, muszę wymyślić dodatkową warstwę pośrednictwa, która wyodrębnia całe poszczególne stany gry. Podczas gdy z częściowo ustalonym czasem, w którym nie muszę używać interpolacji, nie muszę wymyślać abstrakcji stanu gry, ponieważ zawsze jest tylko jeden stan gry i są to po prostu „globalne tablice”, które reprezentują moich wrogów i wroga pociski itp.
Jaki jest więc bardziej praktyczny wybór: czy zaimplementuję go częściowo naprawiony, wiedząc, że moje aktualizacje fizyki mogą się komplikować ze zmienną dt. Czy też używam w pełni naprawionego i próbuję wymyślić abstrakcję stanu gry, aby móc śledzić poprzedni stan i aktualny stan w celu wykonania interpolacji?