Pracuję nad grą wyścigową i właśnie wdrożyłem ducha duchowego do odtwarzania poprzednich wyścigów. Korzystam z silnika fizyki i po wielu lekturach doszedłem do wniosku, że najlepszym sposobem przechowywania danych o duchach do odtworzenia byłoby zapisanie pozycji i obrotów samochodu w danych punktach czasowych, jak na przykład opisano tutaj: https: // gamedev. stackexchange.com/a/8380/26261 .
Ale jaki byłby dobry sposób na znalezienie tych punktów czasowych podczas powtórki? Przykładem może być zapis z tymi danymi:
time: +3.19932 (seconds since race start)
position: 180,40 (position at that time)
rotation: 30.4 (rotation at that time)
Ale mam z tym kilka problemów:
Kiedy ponownie odtwarzam, jest mało prawdopodobne, że ponownie dotrę do dokładnego punktu czasowego 3.19932 - bardziej prawdopodobne, że będę miał punkt czasowy około 3.1 i będę musiał znaleźć najbliższy pasujący rekord. Podczas interpolacji nawet najbliższe dopasowanie powyżej i poniżej. Brzmi bardzo nieefektywnie i zajmuje dużo czasu?
W jakiej strukturze listy mogę przechowywać te rekordy do późniejszego odtworzenia? Tablica? Czy to nie znaczy, że czas wyszukiwania rekordów pasujących do określonego czasu wydłuży się, im dłużej trwa wyścig?
Jakiej częstotliwości powinienem użyć dla punktów czasowych? Każda klatka byłaby - myślę - przesadą, raczej powinnam zapisać, tj. Każdą nią klatkę i interpolować pomiędzy nimi, co sprawia, że pytania w 2. pamięci są jeszcze trudniejsze.
Czy ten pomysł jest nawet właściwym podejściem? Jeśli tak, w jaki sposób mogę skutecznie przechowywać i odzyskiwać dane? Należy pamiętać, że generalnie chciałbym skorzystać z powyższej struktury danych, a nie deterministycznych gamestate i rejestrować dane wejściowe użytkownika itp.
Dzięki za wszelką pomoc!
EDYCJA: Zdaję sobie sprawę, że powinienem opisać środowisko, którego używam: Cocos2D na iPhone'a. Istnieje metoda update:(ccTime)delta
. Najlepiej byłoby, gdyby ta metoda była wywoływana co 1/60 sekundy, ale nie ma gwarancji - delta
jest to rzeczywisty czas, jaki upłynął od ostatniego gametu i może być znacznie większy lub mniejszy niż 1/60. Właśnie w tej metodzie chciałbym zapisać bieżący stan gry.