Soy un desarrollador de juegos para novatos y he estado investigando sobre juegos multijugador. Observé que siempre hay algo de latencia, los jugadores siempre reciben actualizaciones de acciones pasadas. Pero hay técnicas como el cálculo de muertos para manejar la latencia. Puedo predecir el movimiento y hacer movimientos suaves. Pero, ¿cómo sincronizaría las acciones como saltar, dejar de caminar, etc.
Supongamos que el cliente A se estaba moviendo, estaba a 100m a 10.2 con una velocidad de 100m / seg y envió esta información. El cliente B recibiría esta información un poco más tarde, deja que sea 10.4. Entonces, en el cliente B, puedo usar la predicción y colocar el cliente A a 120 m. Pero, ¿y si, el cliente hizo un salto a 110m a 10.3. No puedo predecir eso y, como he estado usando predicciones, no puedo mostrar al cliente A un salto en el pasado.
Puedo resolver este problema al no enviar ninguna acción de salto. Pero, ¿y si mi juego tiene algunos vacíos donde los jugadores pueden caer y morir? Por lo tanto, si no sincronizo las acciones de salto, otros jugadores observarán que un jugador estaba corriendo, entonces él cae en el vacío y luego aparece nuevamente en la pantalla destruyendo el compromiso visual.
Jump es solo un ejemplo, puede haber muchos escenarios donde la predicción no puede funcionar. Entonces, ¿cómo lidiar con ellos? Un ejemplo de esto puede ser un juego de arena de batalla multijugador en línea como Awesomenauts.
fuente
Respuestas:
El ajuste de cuentas muerto puede no ser la mejor idea en este caso; debes hacer interpolación de entidades (representando efectivamente a los otros jugadores en el pasado, lo que siempre te da posiciones reales y válidas). He escrito sobre esto con mucho más detalle aquí . Si ver o no jugadores en el pasado es aceptable o no depende de los detalles de lo que intentas hacer.
fuente
Hay una redacción bastante detallada sobre el motor de origen. Parece que parte del código fuente relevante también está disponible como parte del SDK de origen.
https://developer.valvesoftware.com/wiki/Source_Multiplayer_Networking
Utiliza una serie de técnicas para tratar de lidiar con la latencia de red en un modelo servidor-cliente. El punto principal parece ser que el cliente local maneja la entrada y otros eventos localmente como si no hubiera un servidor, y luego trata con la posibilidad de que el servidor diga que el cliente lo hizo mal más tarde.
fuente