Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: CrashKen en Diciembre 07, 2010, 09:10:00 AM

Título: Enviar y recibir paquetes por udp (solucionado)
Publicado por: CrashKen en Diciembre 07, 2010, 09:10:00 AM
Hola, me baje este engine online de kirby ( http://www.64digits.com/games/index.php?cmd=view_game&id=2527&download=1 ) y la verdad que me ayudo un mont?n.
el problema es la lentitud con la que actualiza la posici?n de los dem?s jugadores.
hay un steep que env?a la posici?n a cada rato, pero lo hace por el protocolo tcp que es el ?nico que trae, pero bueno, no importa si se pierden algunos datos de la posici?n, enseguida llegara otro para arreglarlo, y mientras que estee en tcp, har? todo muy lento.
ojo, quiero conservar el tcp para datos importantes, como cuando 1 jugador termina la partida y eso, pero para disparos y posici?n, preferir?a usar udp.

no me gusta pedir cosas, pero bueno :/ esto me supera, ya que aun no termine ning?n juego online, sean los mas detallados posibles, se los agradecer?a mucho.
Gracias!

Edit: Texic me ayudo un monton por el msn con este tema ^^ , lo doy como solucionado pero en realidad decidi quedarme con el tcp, ya que nadie va a abrir los puertos udp para un mmorpg (y menos hecho en gm xd)

Saludos.
Título: Re: Enviar y recibir paquetes por udp
Publicado por: Texic en Diciembre 07, 2010, 05:00:31 PM
Bueno, es complicado explicar bien UDP, yo no termin? de entender toda la mec?nica (me confunde algo lo de los puertos) pero ya me sale crear juegos que usen ese protocolo. Te dejo dos ejemplos, el primero es el ejemplo cl?sico de pong de la 39dll modificado para usar UDP, y el otro un juego m?o que lo implementa (los datos se env?an en el ultimo codigo del evento step del objeto oChar y se reciben en el evento step de mChar). Tambi?n te dejo una traducci?n propia del tutorial UDP de la 39dll. Espero que te sirva para crear tu juego, saludos  :)
Título: Re: Enviar y recibir paquetes por udp
Publicado por: CrashKen en Diciembre 07, 2010, 06:37:10 PM
Cita de: Texic en Diciembre 07, 2010, 05:00:31 PM
Bueno, es complicado explicar bien UDP, yo no termin? de entender toda la mec?nica (me confunde algo lo de los puertos) pero ya me sale crear juegos que usen ese protocolo. Te dejo dos ejemplos, el primero es el ejemplo cl?sico de pong de la 39dll modificado para usar UDP, y el otro un juego m?o que lo implementa (los datos se env?an en el ultimo codigo del evento step del objeto oChar y se reciben en el evento step de mChar). Tambi?n te dejo una traducci?n propia del tutorial UDP de la 39dll. Espero que te sirva para crear tu juego, saludos  :)

Muchas gracias por esos ejemplos!
igual quiero conservar la coneccion tcp para datos importantes, asi que aun estoy en la misma xD voy a tratar de adaptarlo para que funcione pero no creo poder lograrlo xP

Edit: el ejemplo del pong tira error al principio :S
Citar
___________________________________________
ERROR in
action number 1
of Trigger Event: <Deleted>
for object objPongHost:

Error defining an external function.

Edit2: la verdad que tu juego esta excelente! te felicito, s?guelo que tiene muy buena pinta.
Título: Re: Enviar y recibir paquetes por udp
Publicado por: Texic en Diciembre 07, 2010, 08:25:57 PM
Ah, el error es porq tienes que tener la 39dll en la misma carpeta, en el otro puse la 39dll entre los included files, por eso no tira error. Te comento que la conexi?n TCP se conserva, todo lo que tienes que hacer para enviar datos mediante TCP es cambiar el sendmessage(global.udpsock, global.otherip, global.otherudpport); por sendmessage(global.otherplayer); o la variable donde hayas guardado el id del otro jugador, en caso de que le hayas puesto otro nombre
Título: Re: Enviar y recibir paquetes por udp
Publicado por: CrashKen en Diciembre 07, 2010, 08:56:29 PM
ook.
igual el hecho de que el engine tenga soporte para mas de 2 jugadores, me complica bastante la vida :P

as? hago para enviar desde el cliente
Citar//Update position
clearbuffer();
writebyte(2);
writebyte(global.myid);
writeshort(x);
writeshort(y);
writeshort(sprite_index);
writeshort(image_speed);
writeshort(image_index);
sendmessage(global.clientudp, global.serverip, global.serverport);

pero no funciona :/ los paquetes no llegan
Título: Re: Enviar y recibir paquetes por udp
Publicado por: Texic en Diciembre 07, 2010, 11:29:50 PM
Acordate q con UDP ambas computadoras tienen q tener los puertos desbloqueados, tanto desde el firewall como desde el router, eso complica las cosas con el UDP. Ojo, no te confundas, la conexi?n no va a fallar porq se hace v?a TCP, el UDP no requiere conexi?n realmente
Revis? ese tema a muerte q seguramente es la causa del problema. Si est?s muy seguro de que no es ese el problema pasame el juego y le doy una revisada a ver qu? tiene mal
Título: Re: Enviar y recibir paquetes por udp
Publicado por: CrashKen en Diciembre 07, 2010, 11:41:01 PM
si, estoy muy seguro de que no es problema de puertos.
si te bajas el engine online de kyrbi y logras hacer que solo los paquetes que actualizan la posici?n lleguen por udp, me salvas, ya que en mi juego no cambie casi nada, solo agregue un id para el paquete de disparos :P.
igual si es necesario te paso el juego.

Saludos y much?simas gracias.
Título: Re: Enviar y recibir paquetes por udp
Publicado por: Texic en Diciembre 08, 2010, 04:45:53 PM
Ya est? lo modifiqu? para que funcione por udp, lamentablemente no lo puedo probar solo porq me es imposible abrir dos puertos udp en la misma computadora con el mismo ip (hablando de dos clientes, con uno solo funciona obviamente), asi q agregame al msn y lo probamos a ver si anda bien por internet.
Título: Re: Enviar y recibir paquetes por udp
Publicado por: CrashKen en Diciembre 08, 2010, 06:30:08 PM
Cita de: Texic en Diciembre 08, 2010, 04:45:53 PM
Ya est? lo modifiqu? para que funcione por udp, lamentablemente no lo puedo probar solo porq me es imposible abrir dos puertos udp en la misma computadora con el mismo ip (hablando de dos clientes, con uno solo funciona obviamente), asi q agregame al msn y lo probamos a ver si anda bien por internet.

ok ya te agregue, si ves a alguien con el nick "director de gdr" soy yo xd
gracias otra vez :P