Hace un tiempo me descargue un ejemplo de un pong online del foro, y lo e estado modificando para hacer un juego online plataformas.
No se mucho del tema asi que estoy improvisando, entonces, quiero saber si algien puede darme una idea de como lograrlo, darme consejos o ayudarme directamente con el juego.
Tengo unas fallas, como que no se hacer el movimiento "normal", en mis juegos me funciona, pero en este no :'(.
Por ahora solo pueden haber 2 players, pero la idea es que pudieran haber "infinitos". :D
Tambien estoy intentando hacer "MOBs" (CPUs) pero no me funciona, ya que solo los ve 1 player. ;)
Bueno, les dejo el juego y la dll haber si me pueden ayudar en algo, o si les sirve a ustedes de algo. :-[
Gracias de antemano a todo el que lea esto ;)
Al hablar de "infinito" me imagino que quieres hacer un juego online masivo.
Primero que nada no podr?s hacer un juego de esa clase sin un cliente y un servidor, lo que necesitas es hacer 2 programas separados que se conecten entre si.(Aclaro: Se puede hacer en un solo programa como lo tienes en tu archivo adjunto pero no es para nada recomendable al menos que quieras que otras personas tengan acceso al servidor.)
Para que todos los jugadores se puedan ver tienen que mandar su posici?n(x,y) al servidor y este mandarlo a los otros jugadores por medio de paquetes avis?ndoles que alguien esta presente o que se esta moviendo.
En el caso de los "MOBs" estos deben ser controlados por el servidor y mandar su posici?n a todos los clientes para que puedan verlo, en pocas palabras avisarles que hay un mob presente. Una vez que el cliente recibe la informaci?n debe crear el cuerpo del Mob y el servidor controlara su cerebro por as? decirlo.
Ejemplo(Solamente para que te des una idea, no necesariamente es as? de f?cil.):
El cliente manda al servidor la posici?n en la que se encuentra
[gml]
clearbuffer();
writebyte(0); //este es el id del paquete.
writeshort(jugador.x)
writeshort(jugador.y);
send_server();[/gml]
El servidor lo recibe y lo almacena en una base de datos:
[gml]
id_paquete=readbyte();
switch(id_paquete) //aqu? se checa que ID tiene el paquete
{
case 0:
temp_x=readshort();
temp_y=readshort();
break;
}
[/gml]
Deber?as empezar con establecer una conexi?n entre el servidor y el cliente antes de preocuparte por los jugadores y Npcs.
Recuerda que en el servidor se debe guardar toda la informaci?n importante y este mandarla a los clientes, nunca debe ser al rev?s. Te recomiendo que busques ejemplos y tutoriales en la comunidad oficial de Gamemaker hay muchos ahi. Si aun asi no logras entenderlo intenta algo mas simple como un Chat para que de esta forma vallas mejorando...
Si quieres que te ayude(n) deber?as preguntar cosas mas especificas
pues un consejiyo puedes ejecutar 4 veces el juego para probar como funciona con cada jugador
Cita de: ArcariaOnline en Marzo 10, 2011, 08:16:39 AM
Al hablar de "infinito" me imagino que quieres hacer un juego online masivo.
Primero que nada no podr?s hacer un juego de esa clase sin un cliente y un servidor, lo que necesitas es hacer 2 programas separados que se conecten entre si.(Aclaro: Se puede hacer en un solo programa como lo tienes en tu archivo adjunto pero no es para nada recomendable al menos que quieras que otras personas tengan acceso al servidor.)
Para que todos los jugadores se puedan ver tienen que mandar su posici?n(x,y) al servidor y este mandarlo a los otros jugadores por medio de paquetes avis?ndoles que alguien esta presente o que se esta moviendo.
En el caso de los "MOBs" estos deben ser controlados por el servidor y mandar su posici?n a todos los clientes para que puedan verlo, en pocas palabras avisarles que hay un mob presente. Una vez que el cliente recibe la informaci?n debe crear el cuerpo del Mob y el servidor controlara su cerebro por as? decirlo.
Ejemplo(Solamente para que te des una idea, no necesariamente es as? de f?cil.):
El cliente manda al servidor la posici?n en la que se encuentra
[gml]
clearbuffer();
writebyte(0); //este es el id del paquete.
writeshort(jugador.x)
writeshort(jugador.y);
send_server();[/gml]
El servidor lo recibe y lo almacena en una base de datos:
[gml]
id_paquete=readbyte();
switch(id_paquete) //aqu? se checa que ID tiene el paquete
{
case 0:
temp_x=readshort();
temp_y=readshort();
break;
}
[/gml]
Deber?as empezar con establecer una conexi?n entre el servidor y el cliente antes de preocuparte por los jugadores y Npcs.
Recuerda que en el servidor se debe guardar toda la informaci?n importante y este mandarla a los clientes, nunca debe ser al rev?s. Te recomiendo que busques ejemplos y tutoriales en la comunidad oficial de Gamemaker hay muchos ahi. Si aun asi no logras entenderlo intenta algo mas simple como un Chat para que de esta forma vallas mejorando...
Si quieres que te ayude(n) deber?as preguntar cosas mas especificas
Cita de: ArcariaOnline en Marzo 10, 2011, 08:16:39 AM
Al hablar de "infinito" me imagino que quieres hacer un juego online masivo.
Primero que nada no podr?s hacer un juego de esa clase sin un cliente y un servidor, lo que necesitas es hacer 2 programas separados que se conecten entre si.(Aclaro: Se puede hacer en un solo programa como lo tienes en tu archivo adjunto pero no es para nada recomendable al menos que quieras que otras personas tengan acceso al servidor.)
Para que todos los jugadores se puedan ver tienen que mandar su posici?n(x,y) al servidor y este mandarlo a los otros jugadores por medio de paquetes avis?ndoles que alguien esta presente o que se esta moviendo.
En el caso de los "MOBs" estos deben ser controlados por el servidor y mandar su posici?n a todos los clientes para que puedan verlo, en pocas palabras avisarles que hay un mob presente. Una vez que el cliente recibe la informaci?n debe crear el cuerpo del Mob y el servidor controlara su cerebro por as? decirlo.
Ejemplo(Solamente para que te des una idea, no necesariamente es as? de f?cil.):
El cliente manda al servidor la posici?n en la que se encuentra
[gml]
clearbuffer();
writebyte(0); //este es el id del paquete.
writeshort(jugador.x)
writeshort(jugador.y);
send_server();[/gml]
El servidor lo recibe y lo almacena en una base de datos:
[gml]
id_paquete=readbyte();
switch(id_paquete) //aqu? se checa que ID tiene el paquete
{
case 0:
temp_x=readshort();
temp_y=readshort();
break;
}
[/gml]
Deber?as empezar con establecer una conexi?n entre el servidor y el cliente antes de preocuparte por los jugadores y Npcs.
Recuerda que en el servidor se debe guardar toda la informaci?n importante y este mandarla a los clientes, nunca debe ser al rev?s. Te recomiendo que busques ejemplos y tutoriales en la comunidad oficial de Gamemaker hay muchos ahi. Si aun asi no logras entenderlo intenta algo mas simple como un Chat para que de esta forma vallas mejorando...
Si quieres que te ayude(n) deber?as preguntar cosas mas especificas
Cita de: ArcariaOnline en Marzo 10, 2011, 08:16:39 AM
Al hablar de "infinito" me imagino que quieres hacer un juego online masivo.
Primero que nada no podr?s hacer un juego de esa clase sin un cliente y un servidor, lo que necesitas es hacer 2 programas separados que se conecten entre si.(Aclaro: Se puede hacer en un solo programa como lo tienes en tu archivo adjunto pero no es para nada recomendable al menos que quieras que otras personas tengan acceso al servidor.)
Para que todos los jugadores se puedan ver tienen que mandar su posici?n(x,y) al servidor y este mandarlo a los otros jugadores por medio de paquetes avis?ndoles que alguien esta presente o que se esta moviendo.
En el caso de los "MOBs" estos deben ser controlados por el servidor y mandar su posici?n a todos los clientes para que puedan verlo, en pocas palabras avisarles que hay un mob presente. Una vez que el cliente recibe la informaci?n debe crear el cuerpo del Mob y el servidor controlara su cerebro por as? decirlo.
Ejemplo(Solamente para que te des una idea, no necesariamente es as? de f?cil.):
El cliente manda al servidor la posici?n en la que se encuentra
[gml]
clearbuffer();
writebyte(0); //este es el id del paquete.
writeshort(jugador.x)
writeshort(jugador.y);
send_server();[/gml]
El servidor lo recibe y lo almacena en una base de datos:
[gml]
id_paquete=readbyte();
switch(id_paquete) //aqu? se checa que ID tiene el paquete
{
case 0:
temp_x=readshort();
temp_y=readshort();
break;
}
[/gml]
Deber?as empezar con establecer una conexi?n entre el servidor y el cliente antes de preocuparte por los jugadores y Npcs.
Recuerda que en el servidor se debe guardar toda la informaci?n importante y este mandarla a los clientes, nunca debe ser al rev?s. Te recomiendo que busques ejemplos y tutoriales en la comunidad oficial de Gamemaker hay muchos ahi. Si aun asi no logras entenderlo intenta algo mas simple como un Chat para que de esta forma vallas mejorando...
Si quieres que te ayude(n) deber?as preguntar cosas mas especificas
Cita de: ArcariaOnline en Marzo 10, 2011, 08:16:39 AM
Al hablar de "infinito" me imagino que quieres hacer un juego online masivo.
Primero que nada no podr?s hacer un juego de esa clase sin un cliente y un servidor, lo que necesitas es hacer 2 programas separados que se conecten entre si.(Aclaro: Se puede hacer en un solo programa como lo tienes en tu archivo adjunto pero no es para nada recomendable al menos que quieras que otras personas tengan acceso al servidor.)
Para que todos los jugadores se puedan ver tienen que mandar su posici?n(x,y) al servidor y este mandarlo a los otros jugadores por medio de paquetes avis?ndoles que alguien esta presente o que se esta moviendo.
En el caso de los "MOBs" estos deben ser controlados por el servidor y mandar su posici?n a todos los clientes para que puedan verlo, en pocas palabras avisarles que hay un mob presente. Una vez que el cliente recibe la informaci?n debe crear el cuerpo del Mob y el servidor controlara su cerebro por as? decirlo.
Ejemplo(Solamente para que te des una idea, no necesariamente es as? de f?cil.):
El cliente manda al servidor la posici?n en la que se encuentra
[gml]
clearbuffer();
writebyte(0); //este es el id del paquete.
writeshort(jugador.x)
writeshort(jugador.y);
send_server();[/gml]
El servidor lo recibe y lo almacena en una base de datos:
[gml]
id_paquete=readbyte();
switch(id_paquete) //aqu? se checa que ID tiene el paquete
{
case 0:
temp_x=readshort();
temp_y=readshort();
break;
}
[/gml]
Deber?as empezar con establecer una conexi?n entre el servidor y el cliente antes de preocuparte por los jugadores y Npcs.
Recuerda que en el servidor se debe guardar toda la informaci?n importante y este mandarla a los clientes, nunca debe ser al rev?s. Te recomiendo que busques ejemplos y tutoriales en la comunidad oficial de Gamemaker hay muchos ahi. Si aun asi no logras entenderlo intenta algo mas simple como un Chat para que de esta forma vallas mejorando...
Si quieres que te ayude(n) deber?as preguntar cosas mas especificas
El condigo send_server no lo reconoce, tambien lo del servidor no entendi en q object ponerlo, assi que hice un object "server", pero sigue sin funcionarme.
Mira la cosa va masomenos as?, esto es lo mas b?sico que te puedo mostrar. Este ejemplo no lo cre? yo, solo lo traduje para ti porque estaba en ingles.
Los cr?ditos van para TrueValhalla
Tienes que abrir primero el Servidor y ejec?tarlo, despu?s abre el cliente y observa como se conecta. Puedes abrir los clientes que quieras para que veas como el servidor va aceptando todas las conexiones y te las va mostrando en "Conexiones Activas".
Los dll's tienen que estar en la misma carpeta que los .gmk
Gracias, creo que me ayudara empezar con un ejemplo simple, mas o menos "desde cero". Estoy intentando hacer que el cliente mande la posicion del jugador y el servidor la reciba, pero me da error, me sale:
Unknown variable client_tcp_socket
Creo que esto es porque use los condigos que me mandaste antes, que no son "compatibles" con este ejemplo :-[.
Mira los c?digos son compatibles, lo que pasa es que no puedes mandar nada hasta que primero exista una conexi?n entre el cliente y el servidor. Te sale eso por que no has creado esa conexi?n, el ejemplo que te mande es lo mas b?sico que hay. Para empezar de cero primero debes hacer que el cliente se conecte al servidor y despu?s mandar la posici?n. El ejemplo muestra claramente como hacerlo. Si no entiendes esto entonces no estas listo para un juego Online.
Si en el ejemplo que me mandaste, no hay una conexion entre cliente y servidor, entonces que muestra? :-[
No entiendo que tipo de conexi?n necesito hacer, ya que en el ejemplo, el servidor reconoce cuantos clientes hay abiertos, y supongo que eso es algun tipo de conexion ;), entonces que tipo de conexon tengo que lograr para poder mandar paquetes de informacion como el de la posicion de un object?
El ejemplo muestra la conexi?n que necesitas para empezar tu mmorpg. Mira te voy a explicar lo mejor posible:
En el servidor seguramente viste un objeto que se llama obj_player, ese objeto lo crea el servidor cada ves que entra una conexi?n nueva, cada cliente conectado tiene su obj_player de lado del servidor por as? decirlo. Entonces lo que tu tienes que hacer es que una vez conectado es crear una comunicaci?n entre el cliente y su contra parte en el servidor, en pocas palabras en el obj_player es donde se reciben los paquetes de su respectivo cliente. Te recomiendo que antes de intentar hacer otra cosa como mandar la posici?n estudies muy bien este ejemplo ya que es la base de TODO, una ves que entiendas su estructuraci?n y funcionamiento entonces le vas agregando mas cosas. Si no mas te quieres ir adivinando y pegando c?digo en lugares que no tienes ni idea de donde van pues no llegaras a nada cr?eme. Te recomiendo tambi?n que busques otros tipos de ejemplos en la comunidad oficial para que ampl?es tus conocimientos.
-Dragomir
Gracias, eso me ayudo a entener mejor como funciona. Pero hay algo que no entiendo, si quiero hacer el object del PJ del user, uso el obj_player? o hago un object en el cliente? Bueno eso, estudiare mejor el ejemplo.
Y otra cosa, con la comunidad oficial te refieres a esta?
Debes crear un objeto en el cliente que represente al jugador y otro que represente a los otros jugadores. Por comunidad oficial me refiero a http://gmc.yoyogames.com/ (http://gmc.yoyogames.com/) busca engines y ejemplos de mmorpg te servir?n mucho.