Tengo muchas entidades en el lado del cliente que se simulan (sus velocidades se agregan a sus posiciones en función de cada cuadro) y les dejo que se calculen. Envían actualizaciones sobre dónde fueron vistos por última vez y sus cambios de velocidad. Esto funciona muy bien y otros jugadores ven este trabajo encontrar. Sin embargo, después de un tiempo, estos jugadores comienzan a desincronizarse después de un tiempo. Esto se debe a la latencia.
Me gustaría saber cómo puedo interpolar entre estados para que parezcan estar en la posición correcta. Sé dónde se vio por última vez al jugador y su velocidad actual, pero interpolar al último estado visto hace que el jugador realmente se mueva hacia atrás. No pude usar la velocidad para otros clientes y simplemente 'inclinarlos' hacia la dirección apropiada, pero siento que esto causaría un movimiento irregular. Cuales son las alternativas?
fuente
Cuando tu dices:
me hace pensar que su problema puede tener más que ver con que sus relojes se salgan del paso que con cualquier problema de latencia. Si es latencia, debería ser igual de malo al comienzo de 10 minutos. Si un reloj de juego funciona un poco más rápido que el otro, habrá algunos artefactos de nerviosismo extraños que empeorarán con el tiempo. Un cliente podría estar simulando en el futuro, cuando los paquetes actuales lleguen del servidor, tirará al cliente hacia atrás, haciendo que las entidades salten. Ejecute algunas pruebas más para averiguarlo.
Si los relojes de juego no sincronizados son realmente un problema, deberás mirar con mucho cuidado tu ciclo de actualización y asegurarte de que cada actualización se base en la cantidad de tiempo de juego transcurrido (ya sea fijo o variable), y que el juego -el tiempo se avanza usando algo como el reloj de pared (no el tiempo de renderizado u otras variables). Gaffer tiene algunos buenos artículos sobre esto, y aquí hay una pregunta decente sobre los tiempos fijos y los variables . Espero que esto ayude.
fuente