¿Qué implica un simple juego UDP?

17

Una vez intenté escribir un juego simple con UDP en una semana como prueba de usar y tirar. Fue horrible.

Lo tiré temprano. El principal problema que tuve fue restaurar el estado del juego de todos los jugadores / enemigos / objetos a un estado anterior y avanzar rápidamente el juego hasta el punto en que el jugador está jugando (es decir, medio segundo antes de un salto. hacer que el jugador pierda el salto)

¿Quizás este método no es la forma más fácil? Sospecho que es así, pero lo diseñé mal desde el principio y me di cuenta al final del segundo día. (así que no aprendí demasiado o perdí tanto tiempo)

Para mí y para otros, ¿qué implica un juego UDP simple y cómo escribo uno? ¿O cómo resuelvo el problema de predicción restaurando el estado correctamente?

Marcaré esto como CW bc. Sé que habrá muchas respuestas útiles.

usuario1047
fuente

Respuestas:

9

Glenn Fiedler ha escrito un excelente conjunto de artículos sobre esto, que cubre casi todos los conceptos básicos.

falstro
fuente
El artículo sobre el determinismo de coma flotante me dejó boquiabierto. Su mal estado de sincronización no se hace porque ese es el que quería leer. Aunque el determinismo de coma flotante responde muchas preguntas.
Ninguno de esos artículos profundiza sobre la sincronización de estado, que es lo que está pidiendo.
BlueRaja - Danny Pflughoeft
3

Desarrollar el suyo puede ser educativo, pero a menudo puede hacer más si puede aprovechar una implementación existente (o al menos comenzar desde allí).

He usado tanto ENet como Raknet . Solo usé Enet en un juego simple pero hizo lo que necesitaba. Enet usa una API de nivel inferior que Raknet. Raknet fue utilizado en un proyecto más grande. Raknet es extremadamente poderoso, pero quiere hacerte estructurar tu juego alrededor del marco de Raknet.

Enet:

  • Gestión de la conexión
  • Secuencia
  • Canales
  • Fiabilidad
  • Fragmentación y reensamblaje
  • Agregación
  • Adaptabilidad
  • Portabilidad
  • Libertad

Raknet:

  • Replicación de objetos
  • Autopatcher
  • Conexiones seguras
  • Capa de comunicación robusta (básicamente todas las características de Enets acumuladas en un solo elemento)
  • Llamadas a procedimiento remoto
  • Comunicación de voz
  • Perforación NAT
revs deft_code
fuente
+1 para ENet, lo he estado usando durante un tiempo para clientes y les gusta.
Len Holgate
Él está preguntando sobre la sincronización de estado: esta respuesta no tiene nada que ver con eso
BlueRaja: Danny Pflughoeft
-1, la misma razón que BlueRaja
Jonathan Dickinson
2

Si tiene tiempo y energía, puede descargar la fuente Quake 3 y estudiarla. Es bastante fácil de comprender si te sientes cómodo con C e igualmente fácil de jugar.

¿Qué otros juegos multijugador tienen fuente disponible y usan UDP?

Sorteo
fuente
1
Hay un artículo que describe el código también. trac.bookofhook.com/bookofhook/trac.cgi/wiki/Quake3Networking
zooropa
0

Si te vuelves casero (como lo hice yo) aprenderás toneladas, también sobre cosas que no querías saber. Como el NAT transversal. Según caspin, Enet se está perdiendo eso, pero siempre puedes encontrar algún código STUN de código abierto que funcione en la mayoría de las situaciones.

Jonas Byström
fuente