Estoy implementando un clon de asteroides multijugador para aprender sobre la arquitectura de red cliente / servidor en los juegos. He pasado tiempo leyendo las publicaciones de GafferOnGames y Valve sobre la tecnología de su cliente / servidor. Tengo problemas con dos conceptos.
Actualmente tengo un servidor de juegos autorizado que simula la física con box2d y envía el estado del mundo a los clientes aproximadamente 20 veces por segundo. Cada cliente realiza un seguimiento de las últimas instantáneas que recibió y salta entre dos estados para suavizar el movimiento de los sprites. Sin embargo, no es tan suave. Puede ser suave por un tiempo, luego un poco irregular, luego volver a ser suave, etc. He intentado tanto TCP como UDP, ambos son casi lo mismo. ¿Alguna idea de cuál podría ser mi problema? (Nota: Primero implementé esto para un solo jugador, y el movimiento del sprite es perfectamente suave a 60 fps cuando actualizo el mundo de la física solo 20 veces por segundo).
Para resolver el primer problema, pensé que tal vez el cliente también debería ejecutar una simulación box2d y simplemente actualizar las posiciones de sus sprites para que coincidan con las instantáneas del servidor cuando no coinciden. Pensé que esto podría ser más sencillo ya que mi implementación para un solo jugador es fluida. ¿Es esta una buena idea?
Incluso si no soluciona el problema anterior, ¿es necesario para la predicción del lado del cliente? Por ejemplo, si un jugador intenta mover su nave, ¿cómo sabrán si chocan contra un asteroide, una pared o una nave enemiga sin una simulación física? Parece que su nave parece pasar a través del objeto con el que debería colisionar antes de recibir una instantánea del servidor que dice que golpeó el objeto.
¡Gracias!