Estoy creando un juego de carreras simple (naves espaciales, sin gravedad) usando p2.js, phaser y node.js.
Lo que he hecho: el cliente recibe el estado mundial del servidor:
- extrapolar a otros jugadores según la última velocidad / posición del servidor
- compruebe si la predicción del lado del cliente fue correcta; si no, aplique la posición del servidor y procese las entradas de las que el servidor no era consciente.
- paso fijo de física
Servidor:
- recibe aportes de clientes y aplica
- paso fijo de física
- envía estado mundial a cada cliente
Ahora estoy luchando con colisiones entre jugadores. El jugador que colisiona salta todo el tiempo durante la colisión. Creo que es porque la predicción del lado del cliente no está calculando resultados similares al servidor.
El servidor no conoce todas las entradas del jugador (retraso).
El jugador no tiene la misma posición de jugador que colisiona que el servidor (retraso).
La combinación de estos dos hace que el cliente resuelva la colisión de manera diferente al servidor y, cuando llega el estado mundial, el jugador tiene que hacer una gran corrección.