Tenho muitas entidades do lado do cliente que são simuladas (suas velocidades são adicionadas às suas posições em uma base por quadro) e deixo que elas se considerem inoperantes. Eles enviam atualizações sobre onde foram vistos pela última vez e sua velocidade muda. Isso funciona muito bem e outros jogadores veem esse trabalho encontrar. No entanto, após algum tempo, esses jogadores começam a dessincronizar após algum tempo. Isso é devido à latência.
Gostaria de saber como posso interpolar entre estados para que eles pareçam estar na posição correta. Eu sei onde o jogador foi visto pela última vez e sua velocidade atual, mas interpolar para o último estado visto faz com que o jogador realmente se mova para trás. Eu não conseguia usar a velocidade para outros clientes e simplesmente "lê-los" na direção apropriada, mas acho que isso causaria movimentos irregulares. Quais são as alternativas?
fonte
Quando voce diz:
isso me faz pensar que seu problema pode ter mais a ver com o atraso do relógio do que com os problemas de latência. Se houver latência, deve ser tão ruim no início quanto 10 minutos. Se um relógio de jogo estiver correndo um pouco mais rápido que o outro, haverá alguns artefatos de instabilidade estranhos que ficarão cada vez piores. Um cliente pode estar simulando no futuro, quando os pacotes atuais chegarem do servidor, ele puxará o cliente de volta, fazendo com que as entidades pulem. Execute mais alguns testes para descobrir.
Se os relógios fora de sincronia forem realmente um problema, você precisará examinar com muito cuidado o seu loop de atualização e garantir que todas as atualizações sejam baseadas na quantidade de tempo de jogo passada (fixa ou variável) e se o jogo -time é avançado usando algo como o relógio de parede (não renderiza o tempo ou outras variáveis). Gaffer tem alguns bons artigos sobre isso, e há uma pergunta decente aqui falando sobre timesteps fixos versus variáveis . Espero que isto ajude.
fonte