Estou criando um jogo de corrida simples (naves espaciais, sem gravidade) usando p2.js, phaser e node.js.
O que eu fiz: O cliente recebe o estado do mundo do servidor:
- extrapolar outros jogadores com base na velocidade / posição mais recente do servidor
- verifique se a previsão do lado do cliente estava correta - se nenhuma posição de aplicação do servidor e as entradas do processo não estavam atentas.
- etapa fixa da física
Servidor:
- recebe insumos dos clientes e aplica
- etapa fixa da física
- envia estado mundial para cada cliente
Agora estou lutando com colisões entre jogadores. O jogador em colisão está pulando o tempo todo durante a colisão. Eu acho que é porque a previsão do lado do cliente não está calculando resultados semelhantes ao servidor.
O servidor não conhece todas as entradas do player (lag).
O jogador não tem a mesma posição de jogador em colisão que o servidor (lag).
A combinação desses dois fatores faz com que o cliente resolva uma colisão diferente do servidor e, quando o estado mundial chegar, o jogador precisará fazer uma grande correção.