¿Cómo construimos un sistema de repetición del juego?

Grabe por entrada del usuario , no por estado del juego. Guardar el estado del juego continuo (guardar coordenadas para cada objeto para cada cuadro) es demasiado costoso.

Su juego debe ser determinista por entrada. Los juegos tienden a ejecutar actualizaciones de física cada 45 ms (1 marca). Esto significa que si su usuario presiona la tecla “adelante” durante 1 segundo, su juego debe procesar “avanzar” exactamente 22 veces.

Procesar “avanzar” durante 22 ticks consecutivos siempre debe dar como resultado exactamente la misma velocidad y posición del jugador en su juego. Si no es así, algo está terriblemente mal en su código.

Para avanzar en este ejemplo, digamos que en el tic 23 de física, el jugador presiona la tecla de salto una vez. Dada la velocidad inicial y la velocidad de salto, esto siempre debería hacer que el jugador aterrice en la misma posición exacta. Si chocan contra una pared, debería resultar en la misma colisión y posición final, siempre.

Sabiendo esto, solo necesitas la posición inicial del jugador, y guardar el número / tiempo de la marca y los movimientos a medida que entran, y reproducir esos comandos en la física del juego. Si hay ticks que no tienen entrada del jugador, no necesita guardarlos.

Aquí hay un ejemplo (escrito en detalle para lectores humanos):

Marque 0 – juego iniciado, la posición del jugador es (0, 0)
Marque 23 – el jugador presionó “adelante”
Marque 24 – el jugador presionó “adelante”
Marque 25 – el jugador presionó “adelante”

Marque 34 – el jugador presionó “adelante”
Marque 35 – el jugador presionó “saltar”
Marque 58 – el jugador presionó “hacia atrás”
Marque 59 – el jugador presionó “hacia atrás”

etc.