2011-02-23 6 views
5

Estoy trabajando en un proyecto de hobby que consiste en un juego de navegador web multijugador. Es el primero y acabo de tropezar con el problema de latencia.¿Cómo debo lidiar con la latencia en el desarrollo de juegos?

Estoy tratando de hacer que el control del usuario sea lo más suave posible y la latencia se interpone en el camino.

Creo que las latencias promedio pueden ser de alrededor de 80-200ms y que para un control virtualmente suave, un retardo de acción de comando debe ser menor que 100ms.

Tengo algunas preguntas:

  • ¿Sería una buena práctica para tratar de enviar acciones de usuario 100 ms antes de requieren? p.ej. El usuario mantiene presionada la tecla '->', presento la acción de la tecla con la flecha hacia la derecha 100ms antes de que la acción deba enviarse a un servidor.

  • ¿Cómo los desarrolladores mantienen la consistencia/sincronización entre lo que está sucediendo en el servidor en línea y en el cliente?

  • ¿Algún consejo o recomendación?


Gracias chicos, ayuda sería muy apreciada. :)

+4

intente preguntar en http://gamedev.stackexchange.com/ –

+0

@ralu: ¡gracias! ¡No sabía que esto existía! : D – RadiantHex

Respuesta

5

Pregunta 1) Sí, pero si estás haciendo un movimiento en tiempo real como ese, consideraría renderizarlo localmente (usando detección de colisiones y qué no) y luego validar en el servidor para asegurarme de que no hicieron trampa (es decir, actualice la posición en el servidor cada segundo y asegúrese de que hayan pasado de A a B en un segundo, etc.)

Pregunta 2) Cada cierto tiempo (cuarto, medio, segundo completo) que envíe un paquete con actualizaciones del entorno de lo que hicieron otros jugadores y lo que npcs hizo y cosas similares.

Pregunta 3) Desarrollar el perfil. Hazlo de la forma que quieras que sea lógicamente. Luego, si encuentra que la capacidad de reproducción es demasiado lenta, trabaje en la optimización de la interfaz y la capa de red. ¡Puede que te parezca bien!

+0

gracias por esto! Esperaba que la gente se quejara de que la pregunta fuera demasiado genérica, aunque realmente no sé cómo evitarla. Sus respuestas son muy útiles, ¡Gracias! ¿Hay algún recurso útil al que me puedas dirigir por casualidad? – RadiantHex

+1

@RadiantHex no hay problema. Las dos primeras preguntas no fueron muy generales, y la última fue simplemente una invitación al comentario personal, que es la mejor parte de SO. En cuanto a los recursos, todo lo que puedo decir es solo hacer preguntas a medida que surgen (¡obviamente, Google primero!). Como nota al margen, encuentro que las respuestas en gamedev son mucho más cerradas y obstinadas que las de SO. Mi consejo es que si tiene una pregunta que se le preguntaría lo mismo si se tratara de otra aplicación, pero resulta ser un juego, tradúzcalo al contexto fuera del juego, etiquételo con el desarrollador del juego y pregúntelo. {continuado...} – corsiKa

+1

Esto le permite aprovechar la experiencia de todos, ya sean sistemas de entrada de pedidos o telecomunicaciones, pero los tipos que hacen juegos para ganarse la vida/en su tiempo libre aún podrán ofrecer esa visión puntual y específica. Si hubieras preguntado esto sobre un sistema de ingreso de pedidos de AJAX, te habría respondido lo mismo para las tres preguntas. Renderizar, luego validar. Actualice el estado del espacio de trabajo a intervalos regulares. Desarrollar, luego perfil. En gamedev, obtendrías "omg do not use python for games" o algo así. – corsiKa

1

Una cosa importante es cargar recursos cuando sea necesario. Es decir, en la mayoría de los juegos 3D "en movimiento", cargue recursos para acercarse a los objetos que los necesitan.

Cuestiones relacionadas