Sou desenvolvedor de jogos iniciante e tenho pesquisado sobre jogos multiplayer. Observei que sempre há alguma latência, os jogadores sempre recebem atualizações de ações passadas. Mas existem técnicas como o ajuste de contas morto para lidar com a latência. Eu posso prever o movimento e suavizar os movimentos. Mas como eu faria ações sincronizarem como pular, parar de andar etc.
Suponha que o cliente A estivesse em movimento, ele estava a 100m às 10,2 vezes com velocidade de 100m / s e enviou essa informação. O cliente B receberia essas informações um pouco mais tarde, digamos 10.4. Portanto, no cliente B, posso usar a previsão e colocar o cliente A a 120m. Mas e se, o cliente deu um salto a 110m às 10.3. Não posso prever isso e, desde que tenho usado a previsão, não posso mostrar o salto do cliente A no passado.
Eu posso lidar com esse problema não enviando nenhuma ação de salto. Mas e se o meu jogo tiver alguns vazios em que os jogadores possam cair e morrer. Portanto, se eu não sincronizar ações de salto, outros jogadores observarão que um jogador estava correndo e ele será anulado e novamente aparecerá na tela destruindo o engajamento visual.
O salto é apenas um exemplo; pode haver muitos cenários em que a previsão não pode funcionar. Então, como lidar com eles. Um exemplo pode ser os jogos multiplayer online de arena de batalha, como o Awesomenauts.
fonte
Respostas:
Cálculo morto pode não ser a melhor idéia neste caso; você deve fazer a interpolação da entidade (renderizando efetivamente os outros jogadores no passado, o que sempre fornece posições reais e válidas). Eu escrevi sobre isso com muito mais detalhes aqui . O fato de ver ou não jogadores ligeiramente no passado é aceitável ou não depende dos detalhes do que você está tentando fazer.
fonte
Há uma gravação bastante detalhada sobre o mecanismo de origem. Parece que parte do código fonte relevante também está disponível como parte do SDK de origem.
https://developer.valvesoftware.com/wiki/Source_Multiplayer_Networking
Ele usa várias técnicas para tentar lidar com a latência da rede em um modelo servidor-cliente. O ponto principal parece ser que o cliente local lida com entrada e outros eventos localmente como se não houvesse servidor e, em seguida, lida com a possibilidade de o servidor dizer que o cliente fez errado mais tarde.
fonte