Estoy creando mi primer juego en línea usando socket.io, y me gustaría que fuera un juego multijugador en tiempo real como agar.io o diep.io.
Pero me he topado con el problema de tratar de descubrir cómo hacer que todas las computadoras funcionen a la misma velocidad.
Tengo tres ideas para modelos, pero ninguna parece correcta, y me pregunto cómo lo hacen los videojuegos normales. (Puedes saltarte la lectura de mis ideas; solo te dan una forma de ver los problemas que estoy teniendo).
El servidor permite que los clientes se ejecuten solos y pasen actualizaciones al servidor, que luego los transmite al resto de los clientes. Esto tiene el problema de que algunas computadoras funcionan más rápido que otras, lo que les permite actualizarse más rápido y moverse por la pantalla más rápido.
Haga que el servidor les diga a los clientes cuándo actualizar. Entonces puedo esperar hasta que el último cliente responda (una idea terrible en caso de que una persona tenga una computadora lenta), esperar hasta que el primer cliente responda (nuevamente, esperando la comunicación antes de cada trama), o simplemente enviarlos lo más rápido posible (que parece encontrarse con el mismo problema que el número 1).
Al comienzo del juego, haga que el servidor les diga a los clientes qué tan rápido deben actualizarse. Esto significaría que el cliente sería responsable de restringir el movimiento entre ese período de tiempo. Por ejemplo, si alguien de alguna manera logra presionar un botón dos veces dentro de ese período de tiempo, solo enviaría un evento de presión de botón. Esto tiene el problema de que algunas acciones serían ignoradas (como presionar dos veces el botón), y que la interacción dependería del reloj del cliente, que podría no coincidir con el reloj del servidor. El servidor tendría que hacer un seguimiento de cada cliente y asegurarse de que sus actualizaciones se envíen en el momento correcto.
He investigado un poco , pero los artículos que leo no parecen abordar específicamente qué hacer si un cliente envía actualizaciones más rápido que otros clientes.
En mi caso particular, estoy tratando con personas que tienen velocidades de teclado más rápidas (su computadora enviaría más actualizaciones de teclado que otras computadoras).
¿Cómo suelen lidiar los programadores con esto?