Estou trabalhando em um mecanismo de jogo multijogador servidor-cliente 2D (que você pode tentar aqui ). Ele usa o WebRTCDataChannel
s. (As conexões são ponto a ponto, mas o host ainda atua como servidor.)
O maior problema (além da conectividade) é a previsão de entrada local. Fazemos o de sempre: Ao pressionar as teclas, os jogadores se movem instantaneamente, informam ao host quais teclas foram pressionadas, recebem dados do host e os comparam com a posição histórica. A posição é corrigida ao longo do tempo, se houver uma diferença. Isso funciona bem com baixa perda de pacotes ou PDV , mesmo que o ping seja alto.
Se houver perda ou PDV, o desvio pode ser maior. Eu acho que isso ocorre porque, se o primeiro pacote indicando uma mudança de entrada for atrasado ou descartado, o host descobrirá mais tarde e começará a mudar o player mais tarde do que mostra a previsão de entrada local.
Se o jogador estiver em movimento, aumentamos a quantidade de correção aplicada, pois é menos perceptível. Isso parece encobrir as lacunas ao começar a se mover e enquanto se move. No entanto, qualquer correção é mais perceptível se houver uma parada abrupta. Então, se o PDV ou perda significa que o host pensa que parou mais tarde, o host excede, envia dados informando que estão um pouco mais à frente e a correção faz com que o jogador se desvie um pouco. Em conexões esquisitas, os jogadores geralmente perdem notavelmente depois de parar.
Eu não notei isso em outros jogos. Como isso pode ser mitigado?