Tengo una interfaz de tipo apuntar y hacer clic en un cliente, que ejecuta una A * en el servidor, para buscar rutas.
El juego se controla como un RTS, pero el mundo es persistente, por lo que los jugadores deberían poder unirse / salir en cualquier momento, y solo habrá aproximadamente 30 unidades como máximo en la pantalla.
¿Cuál es la mejor manera de sincronizar los movimientos del jugador entre el servidor y el cliente, una vez que he calculado las rutas?
¿El servidor necesita sincronizar a los clientes en cada paso / cuadro de animación? ¿o puede simplemente decirle al cliente "ir a la posición X, Y" para cada nodo en el camino y cada jugador en movimiento? ¿O es mejor simplemente ejecutar los temporizadores de animación tanto en el cliente como en el servidor, y hacer que se sincronice implícitamente de esa manera?
¿Cómo sería el típico intercambio de datos para el movimiento basado en la ruta?
EDITAR:
Algunos de ustedes han estado sugiriendo bloqueo, porque dije "RTS", pero el juego no es un RTS, solo tiene el mismo tipo de interfaz. La gran diferencia es que necesito poder hacer que los jugadores se unan y abandonen el juego en cualquier momento . Perdón por no ser más específico.
fuente
Una vez que se calcula la ruta, el servidor solo usa esa ruta para controlar el personaje. La presencia de una ruta no hace ninguna diferencia para este problema: todavía se envían los mismos datos, ya sean actualizaciones de posición regulares o lo que sea. Por lo general, está bien enviar posiciones regulares (interpoladas en el cliente para suavizarlas) y un mensaje separado cuando la unidad se detiene.
fuente
En mi juego (un juego de tipo RPG multijugador) envío partes del camino al cliente (para NPC cercano), es decir. las 3 siguientes posiciones y el momento en que el NPC debería estar allí. Para los jugadores, solo envío la última posición válida + su marca de tiempo para que en el cliente pueda hacer un cálculo muerto (o algo más elaborado si lo desea).
Esto funciona completamente bien principalmente porque no hay colisiones entre jugadores / NPC (con un retraso bajo no se nota realmente nada, con un retraso de más de 250 ms notará la diferencia si puede ver las dos pantallas (de dos jugadores ) al mismo tiempo, pero todavía no es realmente notable en 'una pantalla').
Entonces diría: vaya con la autoría del servidor (validación de posiciones + marcas de tiempo de los jugadores y también para la IA al principio, puede hacer un sistema más elaborado para el NPC más adelante sin mayores problemas) + predicción del cliente.
PD. Utilizo una precisión de milisegundos que funciona perfectamente bien, excepto que un int firmado solo se mantiene durante unas 3 semanas antes de tener que reiniciar el servidor.
También es posible que desee verificar la predicción del tiempo (es decir, tratar de sincronizarse lo más posible con el servidor).
fuente