Sto lavorando a un gioco di corse automobilistiche e ho appena implementato uno sprite fantasma per riprodurre le gare passate. Uso un motore fisico e dopo molte letture sono giunto alla conclusione che il modo migliore per archiviare i dati fantasma per la riproduzione sarebbe quello di registrare la posizione e la rotazione dell'auto in determinati punti temporali, come ad esempio descritto qui: https: // gamedev. stackexchange.com/a/8380/26261 .
Ma quale sarebbe un buon modo per trovare quei punti durante la riproduzione? Un esempio potrebbe essere un record con questi dati:
time: +3.19932 (seconds since race start)
position: 180,40 (position at that time)
rotation: 30.4 (rotation at that time)
Ma ho diversi problemi con questo:
Quando ripeto, è improbabile che raggiunga di nuovo il punto esatto a 3.19932 - più probabilmente, avrò un punto di tempo intorno a 3.1 e dovrò trovare il record di corrispondenza più vicino. Durante l'interpolazione, anche la corrispondenza più vicina sopra e sotto. Sembra molto inefficiente e richiede tempo?
In quale struttura di elenco è possibile archiviare questi record per una riproduzione successiva? Un array? Ciò non significa che il tempo di ricerca per i record che corrispondono a un determinato tempo aumenterà quanto più lunga è la gara?
Quale frequenza dovrei usare per i punti temporali? Ogni frame sarebbe - suppongo - eccessivo, piuttosto dovrei salvare cioè ogni ennesimo frame e interpolare in mezzo, il che rende le domande di archiviazione in 2. ancora più difficili.
Quindi questa idea è anche l'approccio giusto? In caso affermativo, come posso archiviare e recuperare i dati in modo efficiente? Si prega di notare che in genere vorrei utilizzare la struttura dei dati sopra, non gamestates deterministici e registrare input dell'utente ecc.
Grazie per qualsiasi aiuto!
EDIT: mi rendo conto che dovrei descrivere l'ambiente che uso: Cocos2D per iPhone. C'è un metodo update:(ccTime)delta
. Idealmente, questo metodo dovrebbe essere chiamato ogni 1/60 secondi, ma non vi è alcuna garanzia: delta
è il tempo effettivo trascorso dall'ultimo gametick e potrebbe essere molto più o meno di 1/60. È in questo metodo che vorrei memorizzare l'attuale gamestate.