Pregunta

Estoy pensando en hacer un juego en red.Soy un poco nuevo en esto, y ya se han de ejecutar en un montón de problemas tratando de armar un buen plan para la navegación a estima y la latencia de la red, así que me encantaría ver algo de buena literatura sobre el tema.Voy a describir los métodos que he considerado.

Originalmente, me acaba de enviar el jugador de la entrada para el servidor, simulado allí, y la emisión de los cambios en el estado del juego a todos los jugadores.Este hecho trampa difícil, pero bajo de alta latencia cosas fueron un poco difícil de controlar, ya que usted no ve los resultados de sus propias acciones inmediatamente.

Este artículo de GamaSutra tiene una solución que ahorra ancho de banda y hace que la entrada del local un aspecto más suave mediante la simulación en el cliente así, pero parece que tirar de trucos de corrección por la ventana.También, no estoy seguro de qué hacer cuando los jugadores comienzan a manipular el medio ambiente, empujando las rocas y el como.Estos previamente neutro objetos temporalmente se convierten en objetos que el cliente necesita para enviar Pdu, o tal vez varios jugadores a la vez.Cuya Pdu iba a ganar?Cuando los objetos dejan de ser doblemente seguimiento por parte de cada jugador (a comparar con los muertos en cuenta la versión)?Dios no lo quiera, dos jugadores participar en un sumo partido (por ejemplo,empezar a empujar unos a otros).

Este gamedev.net poco muestra el gamasutra solución inadecuada, sino que describe un método diferente que realmente no arreglar mi colaboración boulder empujando ejemplo.La mayoría de las otras cosas que he encontrado son específicos a los tiradores.Me encantaría ver algo más orientado a juegos que se juegan como Zelda de SNES, pero con un poco más de física / impulso involucrados.

  • Nota:No estoy preguntando acerca de la simulación de la física aquí -- otras bibliotecas tienen que cubrir.Sólo las estrategias para hacer que los juegos de suave y reactiva a pesar de la latencia de la red.
¿Fue útil?

Solución

Echa un vistazo a cómo la Válvula hace en el Motor de la Fuente: http://developer.valvesoftware.com/wiki/Source_Multiplayer_Networking

Si se trata de un shooter en primera persona que usted probablemente tendrá que profundizar en algunos de los temas que se mencionan, tales como:la predicción, la compensación, y la interpolación.

Otros consejos

Me parece esta red de física de la entrada de blog por Glenn Fiedler, y más aún la respuesta/discusión a continuación, awesome.Es bastante largo, pero vale la pena cuando.

En resumen

El servidor no puede seguir reiterando la simulación siempre que el cliente haya recibido en un moderno juego de simulación de la física (es decir,o los vehículos de la dinámica de cuerpos rígidos).Por lo tanto, el servidor de pedidos de todos los clientes de latencia+jitter (tiempo), por delante de servidor, de modo que todos los incomming paquetes vienen en JIT antes de que el servidor necesita 'em.

También se proporciona un esquema de cómo manejar el tipo de propiedad que usted está pidiendo.Las diapositivas se mostró en la GDC son impresionantes!

En la trampa

El señor Fiedler sí mismo (y de otros) afirman que este algoritmo sufre de no ser muy engañar a prueba.Esto no es cierto.Este algoritmo no es menos fácil o difícil de explotar de cliente/servidor tradicional de predicción (véase el artículo de la relación cliente/servidor tradicional de predicción en @CD Sánchez respuesta).

Para ser absolutamente claro:el servidor no es más fácil engañar simplemente porque recibe de la red física de posicionamiento de justo a tiempo (en lugar de x milisegundos tarde como en los tradicionales de predicción).Los clientes no se verán afectados, ya que todos ellos reciben la información de posición de sus oponentes con la misma latencia como en el tradicional de predicción.

No importa que el algoritmo de selección, puede que desee agregar truco de protección si usted está lanzando un gran título.Si, te sugiero agregar cifrado en contra de títere de los bots (por ejemplo un XOR de cifrado de flujo donde la "secuencia de claves es generado por una pseudo-random number generator") y las simples comprobaciones de estado en contra de las grietas.Algunos desarrolladores también implementar algoritmos para comprobar que los archivos binarios están intactos (para reducir el riesgo de agrietamiento) o para garantizar que el usuario no está ejecutando un depurador (para reducir el riesgo de una grieta en desarrollo), pero esos son más discutibles.

Si sólo estás haciendo un pequeño juego indie, que sólo puede ser interpretado por algunos pocos de miles de jugadores, no te molestes en la implementación de cualquier anti-cheat algoritmos de hasta 1) necesidad de ellos;o 2) la base de usuarios crece.

hemos implementado un multijugador juego de la serpiente, basado en un sistema obligatorio de servidor remoto y jugadores que hacen que las predicciones.Cada 150ms (en la mayoría de los casos) el servidor envía un mensaje que contiene todos los movimientos consolidados enviados por cada control remoto del reproductor.Si el cliente remoto movimientos llegar tarde para el servidor, que descarta ellos.El cliente de la voluntad de repetición del último movimiento.

Retirar la creación de Redes temáticas de educación en el XNA Creador de la página web del Club.Se profundiza en temas como la arquitectura de red (peer to peer o cliente/servidor), la Red de Predicción, y un par de otras cosas (en el contexto de XNA, por supuesto).Esto puede ayudarle a encontrar las respuestas que estás buscando.

http://creators.xna.com/education/catalog/?contenttype=0&devarea=19&sort=1

Usted podría tratar de imponer la latencia a todos sus clientes, según el promedio de latencia en la zona.De esa manera el cliente puede intentar evitar los problemas de latencia y se sentirá similar para la mayoría de los jugadores.

Estoy, por supuesto, no lo que sugiere que la fuerza de un retardo de 500ms en todo el mundo, pero la gente con 50ms puede estar bien con los 150 (extra 100ms añadido) para que el juego parezca más suave.

En pocas palabras;si usted tiene 3 jugadores:

  • Juan:30ms
  • Pablo:150ms
  • Amy:80ms

Después de los cálculos, en lugar de enviar los datos a los clientes, todo al mismo tiempo, usted cuenta para su latencia y empezar a enviar a Pablo y a Amy antes de Juan, por ejemplo.

Pero este enfoque no es viable en el extremo de la latencia de las situaciones donde las conexiones de acceso telefónico o de los usuarios de la red podría estropear por todo el mundo.Pero es una idea.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top