Estoy creando un juego de plataformas que tiene una función "cooperativa" que me gustaría trabajar en redes / internet.
Ahora he leído sobre la programación de juegos en red, incluidos artículos como Lo que todo programador necesita saber sobre las redes de juegos y entiendo la diferencia entre técnicas como el bloqueo de punto a punto y las arquitecturas de predicción de servidor-cliente:
- Llegué a la conclusión de que para cualquier juego en tiempo real que se juegue en Internet, el bloqueo entre pares simplemente no es una opción.
- También me preocupa que incluso para un juego de plataformas, una arquitectura simple de cliente-servidor (sin algún tipo de predicción del cliente) resulte en un juego degradado debido a la demora entre la acción y la reacción causada por un viaje de ida y vuelta a un servidor. (Dicho esto, quiero eliminar la necesidad de un servidor central, por lo que solo uno de los jugadores, el cliente, experimentará este retraso).
Esto deja la predicción del cliente, pero incluso para un juego simple como un juego de plataformas esto todavía suena bastante complejo.
¿Cómo haría para crear un sistema predictivo de cliente que funcione para un juego de plataformas multijugador?
networking
multiplayer
platformer
Justin
fuente
fuente
Respuestas:
No creo que la mitad de su base de código se convierta en código de red si decide implementar una característica como esta.
En mi opinión, la forma más sencilla de hacer esto es configurar un servidor "central" (incluso si eso significa que un jugador "aloja" el juego y luego se conecta a su propio servidor) que acepta todas las entradas del usuario lo más rápido posible , y lo envía de vuelta a cada cliente.
En el cliente, implementa esto de manera diferente que si estuviera haciendo un juego cooperativo para dos jugadores localmente, excepto que lee P1 desde el teclado y P2 desde la red.
Tendrá que hacer que el servidor envíe un estado de juego completo de vez en cuando, y ambos clientes pueden acceder al nuevo estado de autorización del servidor, o pueden pasar al nuevo estado (durante unos segundos). A menos que tenga una pérdida de paquetes horrible o toneladas de clientes por servidor, este enfoque debería ser suficiente para la situación que describe.
fuente
Tengo un juego de estilo mMORPG completamente funcional con predicción del cliente (el juego está lejos de terminar pero funciona 'OK') y tengo algo a lo largo de 40,000 líneas de código para el servidor y el doble para el cliente (agregue la misma cantidad para herramientas, etc. .). La predicción probablemente no sea más de unos pocos cientos de líneas (si es que eso) y la red completa separa un par de miles de líneas, pero no más de 5.000 (depende un poco de dónde dibuje la línea).
Pregunta difusa respuesta difusa ;-)
fuente
Una proporción significativa del código de red puede ser independiente del juego que estás jugando. Por eso, y porque eres nuevo en las redes, lo primero que te sugiero que hagas es encontrar bibliotecas que hagan ese trabajo por ti. RakNet por ejemplo.
Una cosa que querrás en tu código de juego es la capacidad de manejar múltiples estados de juego diferentes, que puedes usar para interpolación y predicción. Eso es bastante simple de diseñar desde el principio, pero puede ser una cantidad significativa de trabajo si está modificando un juego para un jugador existente.
También tenga en cuenta que si desea que extraños jueguen un juego de igual a igual a través de Internet, probablemente necesitará al menos un servidor en algún lugar que maneje el lobby / emparejamiento.
fuente