Leí esto: Cómo diseñar un sistema de repetición Pero en realidad no responde a mi pregunta.
Mi juego está construido con el cliente "vista" del juego como un programa separado del servidor "modelo" y "controlador". (un poco como un mmo, o cualquier juego multijugador construido de esta manera). El lado del servidor es siempre la "verdad" del juego, solo acepta solicitudes de acción como entrada de los clientes y eventos de salida y mensajes de "estado actual".
El modelo y las reglas del juego son totalmente deterministas con un ciclo fijo de actualización "tick", por lo que en el lado del servidor puedo registrar tanto los eventos enviados a las vistas del cliente como las solicitudes de acción. Ambos están asociados a un número de ciclo específico.
La pregunta es: en este caso, para configurar un sistema de reproducción, ¿debo usar la entrada o las solicitudes de acción del usuario (como se sugiere allí) o los eventos?
Me parece que ambos darían exactamente el mismo resultado. Las únicas diferencias que puedo ver son:
- Los eventos proporcionan la salida real, mientras que las solicitudes de acción deben procesarse para proporcionar eventos.
- Las solicitudes de acción pueden tener muchos menos datos para registrar.
¿Hay otras cosas a considerar?
Cualquiera de los dos funciona, aunque hay algunas cosas a considerar.
Primero, recuerde que necesita registrar la información del tiempo. Para juegos con cualquier tipo de velocidad de fotogramas variable, esto puede ser particularmente complicado; debes asegurarte de que tus datos de repetición puedan proporcionar exactamente la misma información de sincronización que el juego originalmente utilizado para la simulación.
También debes tener en cuenta los ajustes en el comportamiento del juego. Si graba la entrada y luego modifica cualquier parte de cómo se maneja la entrada, cómo se resuelve la física, etc., su grabación se vuelve inválida. Incluso si registra eventos del juego, si alguna parte de cómo esos eventos se interpretan cambia, está atascado.
Si solo desea reproducciones, un buen enfoque es registrar una lista específica de posiciones y rotaciones para la entidad del jugador junto con información de sincronización. Deshabilita la mayor parte de la física y otra lógica de juego mientras ejecutas la reproducción como puedas. Lo fácil o factible que esto sea depende de cuántos otros objetos necesite sincronizar.
fuente