Eu li o seguinte: Como projetar um sistema de repetição Mas isso realmente não responde à minha pergunta.
Meu jogo é construído com o cliente "view" do jogo como um programa separado do servidor "model" e "controller". (um pouco como um mmo ou qualquer jogo multiplayer criado dessa maneira). O lado do servidor é sempre a "verdade" do jogo; ele aceita apenas solicitações de ação como entrada dos clientes e eventos de saída e mensagens "estado atual".
O modelo e as regras do jogo são totalmente determinísticos com um ciclo fixo de atualização "tick", para que no lado do servidor eu possa registrar os eventos enviados para as visualizações do cliente e as solicitações de ação. Ambos estão associados a um número de ciclo específico.
A questão é: nesse caso, para configurar um sistema de reprodução, devo usar a entrada ou solicitações de ação do usuário (conforme sugerido lá) ou os eventos?
Parece-me que ambos dariam exatamente a mesma saída. As únicas diferenças que posso ver são:
- Eventos fornece a saída real, enquanto as solicitações de ação precisam ser processadas para fornecer eventos.
- As solicitações de ação podem ter muito menos dados a serem registrados.
Há outras coisas a considerar?
Ou funciona, embora haja algumas coisas a considerar.
Primeiro, lembre-se de que você precisa registrar informações de tempo. Para jogos com qualquer tipo de taxa de quadros variável, isso pode ser particularmente complicado; você precisa garantir que seus dados de reprodução possam fornecer exatamente as mesmas informações de tempo que o jogo originalmente usou para simulação.
Você também precisa dar conta de ajustes no comportamento do jogo. Se você gravar entrada e depois ajustar qualquer parte de como a entrada é manipulada, como a física é resolvida etc., sua gravação se torna inválida. Mesmo se você gravar eventos do jogo, se alguma parte de como esses eventos forem interpretados mudar, você ficará preso.
Se você deseja apenas reproduções, uma boa abordagem é gravar uma lista específica de posições e rotações para a entidade do jogador, juntamente com informações de tempo. Desabilite o máximo de física e outra lógica de jogo enquanto estiver executando a reprodução possível. O quão fácil ou viável é isso depende de quantos outros objetos você precisa sincronizar.
fonte