Estoy trabajando en un motor de juego multijugador servidor-cliente 2D (que puedes probar aquí ). Utiliza WebRTC DataChannel
s. (Las conexiones son de igual a igual, pero el igual de host todavía actúa como un servidor).
El mayor problema (aparte de la conectividad) es la predicción de entrada local. Hacemos lo habitual: al presionar las teclas, los jugadores se mueven instantáneamente, le dicen al host qué teclas se presionan, reciben los datos del host y los comparan con la posición histórica. La posición se corrige con el tiempo si hay una diferencia. Esto funciona bien con una baja pérdida de paquetes o PDV , incluso si el ping es alto.
Si hay pérdida o PDV, la desviación puede ser mayor. Creo que esto se debe a que si el primer paquete que indica un cambio de entrada se retrasa o se cae, el host se entera más tarde y comienza a cambiar ese jugador más tarde de lo que muestra su predicción de entrada local.
Si el jugador se está moviendo, aumentamos la cantidad de corrección aplicada, ya que es menos notable. Esto parece tapar huecos cuando comienza a moverse y mientras se mueve. Sin embargo, cualquier corrección es más notable si se detienen abruptamente. Luego, si el PDV o la pérdida significa que el host piensa que se detuvo más tarde, el host se sobrepasa, envía datos que dicen que están un poco más adelante, y la corrección hace que el jugador se desplace un poco. En conexiones escamosas, los jugadores a menudo se desvían notablemente después de detenerse.
No he notado esto en otros juegos. ¿Cómo se puede mitigar esto?