[GAME] Rosie ~ The Rascal

Proyectos en Desarrollo.

Re: [GAME] Rosie ~ The Rascal

Postby SimulatorOne » Fri Apr 06, 2012 3:10 am

SimulatorOne wrote:Pues te digo lo que funciona y lo que no Actualmente:

-Soporte multijugador 4 jugadores(4 clientes) (+ Servidor aparte,Jugador 0)
-Zona Multijuador de Espera "Lobby".
-Soporte de Nicks de nombre de jugador, 12 caracteres (pero aun no visible en los chats de los demas)
-Los jugadores pueden Elejir el Skin a gusto (pero aun no visible por los demas jugadores...)
-Soporte de CHAT hasta 48 Caracteres, multijugador (el Servidor tambien puede chatear) Funciona al 100%
-Sopprte para ver a otros jugadores moverse a tiempo real (lo mas rapio que pueden,dependiendo de la CPU y conexion ADSL)

Lo que aun no funciona,falla o falta por programar:
40%-Soporte de Skins que los Clientes sepan que Skin esta usando ese jugador.(de momento por nombre de skin)
20%-Mostrar nombre del Nick del jugador al chatear (de momento solo muestra el numero de ID jugador donde proviene el chat)
20%-Boton de Confirmar "Listo" para empezar a jugar a la siguiente Zona. (de momento se trata de un comando)
0%-Enviar a los demas Clientes "que cosas" han destruido/cogido : Anillos,Enemigos,Cabinas,Bloques...


Actualizo :)
Pude avanzar y ahora parece funcionar BIEN!!
Hasta 8 jugadores a laa vez!! xDD
la foto es graande: link de foto: http://dl.dropbox.com/u/60746976/Rosie%7EThe.Rascal-Fotos/Portapapeles01%20%282%29.png
Image

Pues te digo lo que funciona y lo que no Actualmente:

-Soporte multijugador 8 jugadores(8 clientes) (+ Servidor aparte,Jugador 0)
-Zona Multijuador de Espera "Lobby".
-Soporte de Nicks de nombre de jugador, 12 caracteres 100% funcionando
-Los jugadores pueden Elejir el Skin a gusto 100% funcionando
-Soporte de CHAT hasta 48 Caracteres, multijugador (el Servidor tambien puede chatear) Funciona al 100%
-Sopprte para ver a otros jugadores moverse a tiempo real (lo mas rapio que pueden,dependiendo de la CPU y conexion ADSL)
-Soporte de Skins, que los Clientes sepan que Skin esta usando ese jugador visible.
-Mostrar nombre del Nick del jugador al chatear


Lo que aun no funciona o falta por programar:
20%-Boton de Confirmar "Listo" para empezar a jugar a la siguiente Zona. (por programar)
0%-Enviar a los demas Clientes "que cosas" han destruido/cogido : Anillos,Enemigos,Cabinas,Bloques...


Que puedo hacer para confirmar para empezar a jugar una zona???
un boton de teclado, un texto/comado, un NCP de esos... no se....
Estoy abierto a sugerencias.
User avatar
SimulatorOne
 
Posts: 6626
Joined: Tue Nov 17, 2009 2:52 pm
Location: Barcelona

Re: [GAME] Rosie ~ The Rascal

Postby erkosone » Fri Apr 06, 2012 12:03 pm

Que estructura llevas ahora mismo? es para saber mejor como hacerlo, es sencillo, pegame tu estructura y lo miramos.
User avatar
erkosone
 
Posts: 10654
Joined: Tue Feb 24, 2009 2:13 pm
Location: Barcelona.

Re: [GAME] Rosie ~ The Rascal

Postby SimulatorOne » Fri Apr 06, 2012 4:10 pm

Pues uso este, que dije aki: viewtopic.php?p=43999#p43999
SimulatorOne wrote:por el echo de transportar informaacion: variables,Strings de otros jugadores y servidor...
por seguridad decidi por crear esta STRUCT
Source Code (Gemix) [ Download ] [ Hide ]
  • CONST
  • TOP_JUG_NET=4;//TOP JUGADORES NET 4=4 JUGADORES
  • top_STRNET=15;
  • top_STRNETC=47;
  •  
  • GLOBAL
  • STRUCT JUG_NET[TOP_JUG_NET];//0=SERVER, 1,2,3...=JUGNET.
  •  short XY[1];//COORDENADAS(4 BYTES) -32768/32767
  •  BYTE GFAL[3];//GRAPH,FLAGS,ALPHA,ANGLE+45 (4 BYTES) 0/255
  •  
  •  STRING CMES_S[top_STRNET];//COMANDOS 16 BYTES (PARA SERVIDOR)
  •  STRING CMES_C[top_STRNET];//COMANDOS 16 BYTES (PARA CLIENTE)
  •  
  •  STRING CHAT_S[top_STRNETC];  //CHAT 48 BYTES (PARA SERVIDOR)
  •  STRING CHAT_C[top_STRNETC+1];//CHAT 49 BYTES (PARA CLIENTE)
  •  DWORD LOGCHAT;//NUMERO DE CHAT 4bytes(control de chat)
  • END


Tiene varias STRING para permitir el uso de Entrada de datos/envio y recepcion de comandos, y mensajes de chat.
LOGCHAT es un controlador que numera la liniea de chat, para evitar que se creen Duplicados en otros jugadores.

Y luego esta XY y GFAL que son datos de cada jugador que siempre cambian, cordenadas, grafico flags...
solo pesa 8 bites todo eso.

De momento no hay Buffer de comandos ,ni de chat...
pero seria bueno crear un buffer de envio de comandos ,chat en los clientes.
y un buffer en el servidor de comandos pendientes por hacer.

Los comandos son ultra rapidos, el servidor siempre esta listo para recibir comandos...
a no ser que justo en ese momento otro cliente le envie otro comando...
entonces ese comando se almacena en el buffer, como una lista de comandos por hacer.


Pues es así:

De momento me viene bien :) así tal cual... quizas sobre algunos bytes... pero de momento tengo suficiente.

Te paso algo mas?
User avatar
SimulatorOne
 
Posts: 6626
Joined: Tue Nov 17, 2009 2:52 pm
Location: Barcelona

Re: [GAME] Rosie ~ The Rascal

Postby erkosone » Fri Apr 06, 2012 5:16 pm

mm.. pues con el chat mismo, puedes hacer algo como esto:

Enviado desde el servidor cuando tiene a los suficientes clentes:
"@Start_party_"

En los clientes..
Al ver ese string.. cargan la partida y ponen en su parte del chat:
"@Listo_!"

En el servidor mientras tanto..
- cuando todos los clientes tengan su mensaje a "@Listo_!" poner el mensaje del servidor a "@Party_Start!"

En los clientes..
Al ver el mensaje de party_start..
dejar su mensaje vacio.. y comenzar a jugar..

Por seguridad y en el servidor..
Si pasados 10 segundos algún cliente no ha puesto su mensaje a "" desconectarlo..

Y ale.. ya tienes la party funcionando..


Cuando uno de los clientes consiga pasarse la pantalla..
pues mandas un mensaje desde el servidor a los clientes para que terminen la partida y vuelta a empezar.
User avatar
erkosone
 
Posts: 10654
Joined: Tue Feb 24, 2009 2:13 pm
Location: Barcelona.

Re: [GAME] Rosie ~ The Rascal

Postby SimulatorOne » Fri Apr 06, 2012 6:57 pm

erkosone wrote:mm.. pues con el chat mismo, puedes hacer algo como esto:

Enviado desde el servidor cuando tiene a los suficientes clentes:
"@Start_party_"

oks, seria un comando oculto que el Servidor envia a los clientes
y como minimo se necesita 2 clientes par iniciar una partida

erkosone wrote:En los clientes..
Al ver ese string.. cargan la partida y ponen en su parte del chat:
"@Listo_!"

aqui es donde me pierdo, aun se suponen que estan en la sala de espera.

Los jugadores deben teclear "@Listo" para Confirmar que quieren jugar,no?

El servidor cuenta cuantos "@Listos" hay, si como minimo hay 2 Listos con 2 Clientes, iniciaria la partida.
En cambio, si cuenta 2 listos, y hay 4 clientes... esperaria a que los otros 2 clientes confirmen....
o que uno de los jugadores Confirmados diga, @Start_Game.

Tambien estaria bien un comando para DesConfirmar: como @NoListo
Eso lo retirara de la futura partida.

Se supone que esos Clientes que NO juegan.... Se Auto desconectarian con NET_KICK_PLAYER
ademas la partida se cerraria a nuevos jugaadores con net.allow_connections=false;

Quizas seria muy pesado No cerrar/expulsar aa esos jugadores que se queden en la sala de espera.
Mientras por ejemplo 2 clientes estan jugando en la Zona 1, hay otros 2 clientes que estan de chachara en la sala de espera.
xD

Si un jugador se paasa la Zona 1, esta inmediatamente caargaria la Zona 2... y la jugaria.
El otro jugador aun se quedo en la Zona 1.... y debe superarla...
Si ese jugador que llego ultimo se pasa la Zona 1, cargaria la Zona 2... y veria los otros jugadores por caasi al final
xD

Creo que es muy hevy eso... xDDDD
verdaad? seriaa mas justo que Todos los clientes Empezaran el nivel a la vez,verdad?
erkosone wrote:En el servidor mientras tanto..
- cuando todos los clientes tengan su mensaje a "@Listo_!" poner el mensaje del servidor a "@Party_Start!"

En los clientes..
Al ver el mensaje de party_start..
dejar su mensaje vacio.. y comenzar a jugar..

Por seguridad y en el servidor..
Si pasados 10 segundos algún cliente no ha puesto su mensaje a "" desconectarlo..

Y ale.. ya tienes la party funcionando..


Cuando uno de los clientes consiga pasarse la pantalla..
pues mandas un mensaje desde el servidor a los clientes para que terminen la partida y vuelta a empezar.



Lo que si, Aun no se sabe que muñecos... personajes representan cada jugaador... :/
me refiero a que encima de la cabeza, como muchos RPG indican el nombre del jugador y numero de jugador...
creo que podria ser un boton del teclado para mostrar y ocultar esa caracteristica.

El chat funciona bien. y si te dice el nombre de quien escribe.

Puess como sabras uso la resolucion pequeña de 320x240 pues debo diseñar bien el chat
me refiero a la fuente y claro me gustaria que fuese la FNT del nuevo Generador de fuentes.
Que se ve muy claro. Quizas con 48 caracteres sea mucho,no?
y luego que no tape mucha vision de juego...
Estaria bien que se pudiera ocultar y mostrar esa ventana de chat....
aun no estoy claro como hacerlo.
User avatar
SimulatorOne
 
Posts: 6626
Joined: Tue Nov 17, 2009 2:52 pm
Location: Barcelona

Re: [GAME] Rosie ~ The Rascal

Postby erkosone » Fri Apr 06, 2012 8:17 pm

Lo mejor es crear una variable que indica el estado de la partida..
El cliente nada mas conectar la pone a listo! y el server cuando ve que hay suficientes activa la partida, es demasiado complicado gestionar dos mundos paralelos.. el lobby y la partida en si.. no te lo recomiendo.
User avatar
erkosone
 
Posts: 10654
Joined: Tue Feb 24, 2009 2:13 pm
Location: Barcelona.

Re: [GAME] Rosie ~ The Rascal

Postby erkosone » Sun Apr 08, 2012 12:43 am

Hola Simu, he estado testeando a fondo la lib de red y me he dado cuenta de algo que no había tenido en cuenta al principio de todo..

Intenta modificar la parte de la estructura de datos desde un único punto en cada cliente o servidor.. esto es para que no se envien todos los datos mas de una vez.. si por ejemplo modificas un dato y al frame siguiente modificas otro dato estás enviando practicamente lo mismo 2 veces.. y nos comerá el ancho de banda si somos descuidados, te pego el proceso de mi personaje en el juego que estoy haciendo para que veas como lo he montado, igual te da alguna idea. ;)

Source Code (Gemix) [ Download ] [ Hide ]
  • process My_Player();
  • private
  •         int x_buffer;                                                                   // coordenadas correctas del frame anterior..
  •         int y_buffer;                                                                   // coordenadas correctas del frame anterior..
  •         byte last_key=0;                                                                // ultima tecla pulsada "de las teclas que se usan.."
  •         byte anima_walk_up[11]=1,1,2,2,3,3,4,4,5,5,6,6;
  •         byte anima_walk_side[11]=7,7,8,8,9,9,10,10,11,11,12,12;
  •         byte anima_walk_down[11]=13,13,14,14,15,15,16,16,17,17,18,18;
  •         byte anima_shot_up[11]=19,19,20,20,21,21,22,22,23,23,24,24;
  •         byte anima_shot_side[11]=25,25,26,26,27,27,28,28,29,29,30,30;
  •         byte anima_shot_down[11]=31,31,32,32,33,33,34,34,35,35,36,36;
  •         byte anima_shot2_up[9]=37,37,38,38,39,39,40,40,41,41;
  •         byte anima_shot2_side[9]=42,42,43,43,44,44,45,45,46,46;
  •         byte anima_shot2_down[9]=47,47,48,48,49,49,50,50,51,51;
  •         byte anima_steep=1;    
  •         int available_bomb = false;
  •         byte net_graph_;                                                                // el gráfico actual de mi personaje.. para enviarlo por red..
  •         byte net_flags_;                                                                // el valor de flags de mi personaje.. para enviarlo por red..
  • begin
  •         visible = false;
  •         ctype = c_scroll;
  •         scroll[0].camera = id;
  •         graph = new_map(10,10,5,5,rgb(10,10,10));
  •         write_int(0,10,50,3,&x);
  •         write_int(0,10,60,3,&y);
  •         x = 460;
  •         y = 840;
  •         loop
  •                 x_buffer=x;
  •                 y_buffer=y;
  •                 z = 1000 - y;
  •                 if(key(_left))                                                  // IR IZQUIERDA..
  •                         if(anima_steep==0)play_sound(sfx_pasos);end
  •                         x-=2;
  •                         anima_steep=(anima_steep+1) % 11;
  •                         draw_graphic(f_player,anima_walk_side[anima_steep],x-scroll[0].x0,y-scroll[0].y0,z,resolution,angle,100,100);
  •                         net_graph_ = anima_walk_side[anima_steep];
  •                         net_flags_ = 0;
  •                         last_key=1;
  •                         elseif(key(_right))                             // IR DERECHA..
  •                                 if(anima_steep==0)play_sound(sfx_pasos);end
  •                                 //flags=1;
  •                                 x+=2;
  •                                 anima_steep=(anima_steep+1) % 11;
  •                                 draw_graphic(f_player,anima_walk_side[anima_steep],x-scroll[0].x0,y-scroll[0].y0,z,resolution,angle,100,100,0,0,0,1,0);
  •                                 net_graph_ = anima_walk_side[anima_steep];
  •                                 net_flags_ = 1;
  •                                 last_key=2;
  •                                 elseif(key(_up))                                // IR ARRIBA..
  •                                         if(anima_steep==0)play_sound(sfx_pasos);end
  •                                         y-=2;
  •                                         anima_steep=(anima_steep+1) % 11;
  •                                         draw_graphic(f_player,anima_walk_up[anima_steep],x-scroll[0].x0,y-scroll[0].y0,z,resolution,angle,100,100);
  •                                         net_graph_ = anima_walk_up[anima_steep];
  •                                         net_flags_ = 0;
  •                                         last_key=3;    
  •                                         elseif(key(_down))              // IR ABAJO..
  •                                                 if(anima_steep==0)play_sound(sfx_pasos);end
  •                                                 y+=2;
  •                                                 anima_steep=(anima_steep+1) % 11;
  •                                                 draw_graphic(f_player,anima_walk_down[anima_steep],x-scroll[0].x0,y-scroll[0].y0,z,resolution,angle,100,100);
  •                                                 net_graph_ = anima_walk_down[anima_steep];
  •                                                 net_flags_ = 0;
  •                                                 last_key=4;
  •                                                         else                            // DEFAULT AS STAND..
  •                                                                 anima_steep=0;
  •                                                                
  •                                                                 if(last_key==4)
  •                                                                         draw_graphic(f_player,18,x-scroll[0].x0,y-scroll[0].y0,z,resolution,angle,100,100);
  •                                                                         net_graph_ = 18;
  •                                                                         net_flags_ = 0;
  •                                                                                 elseif(last_key==3)
  •                                                                                         draw_graphic(f_player,1,x-scroll[0].x0,y-scroll[0].y0,z,resolution,angle,100,100);
  •                                                                                         net_graph_ = 1;
  •                                                                                         net_flags_ = 0;
  •                                                                                                 elseif(last_key==1)
  •                                                                                                         draw_graphic(f_player,7,x-scroll[0].x0,y-scroll[0].y0,z,resolution,angle,100,100);
  •                                                                                                         net_graph_ = 7;
  •                                                                                                         net_flags_ = 0;
  •                                                                                                                 elseif(last_key==2)
  •                                                                                                                         draw_graphic(f_player,7,x-scroll[0].x0,y-scroll[0].y0,z,resolution,angle,100,100,0,0,0,1,0);
  •                                                                                                                         net_graph_ = 7;
  •                                                                                                                         net_flags_ = 1;
  •                                                                 end
  •                 end
  •                
  •                
  •                
  •                 if(key(_alt))                                                           // generar disparo tipo FLECHA..
  •                         if(!exists(type shot_flecha))
  •                                 sound(sfx_pre_bow);
  •                                 if(last_key==4)
  •                                         for(anima_steep=0;anima_steep<11;anima_Steep++)
  •                                                 draw_text(0,"ATACK",4,x-scroll[0].x0,y-25-scroll[0].y0,-10,0,100,100,0,0,0,0,1);
  •                                                 draw_graphic(f_player,anima_shot_down[anima_steep],x-scroll[0].x0,y-scroll[0].y0,z,resolution,angle,100,100);
  •                                                 frame;
  •                                         end
  •                                         SHOT_FLECHA(x,y,"abajo");
  •                                 end
  •                                
  •                                 if(last_key==3)
  •                                         for(anima_steep=0;anima_steep<11;anima_Steep++)
  •                                                 draw_text(0,"ATACK",4,x-scroll[0].x0,y-25-scroll[0].y0,-10,0,100,100,0,0,0,0,1);
  •                                                 draw_graphic(f_player,anima_shot_up[anima_steep],x-scroll[0].x0,y-scroll[0].y0,z,resolution,angle,100,100);
  •                                                 frame;
  •                                         end
  •                                         SHOT_FLECHA(x,y,"arriba");
  •                                 end
  •  
  •                                 if(last_key==1)
  •                                         for(anima_steep=0;anima_steep<11;anima_Steep++)
  •                                                 draw_text(0,"ATACK",4,x-scroll[0].x0,y-25-scroll[0].y0,-10,0,100,100,0,0,0,0,1);
  •                                                 draw_graphic(f_player,anima_shot_side[anima_steep],x-scroll[0].x0,y-scroll[0].y0,z,resolution,angle,100,100);
  •                                                 frame;
  •                                         end
  •                                         SHOT_FLECHA(x,y,"izquierda");
  •                                 end
  •  
  •                                 if(last_key==2)
  •                                         for(anima_steep=0;anima_steep<11;anima_Steep++)
  •                                                 draw_text(0,"ATACK",4,x-scroll[0].x0,y-25-scroll[0].y0,-10,0,100,100,0,0,0,0,1);
  •                                                 draw_graphic(f_player,anima_shot_side[anima_steep],x-scroll[0].x0,y-scroll[0].y0,z,resolution,angle,100,100,0,0,0,1,0);
  •                                                 frame;
  •                                         end
  •                                         SHOT_FLECHA(x,y,"derecha");
  •                                 end
  •                         end
  •                 end
  •                
  •                
  •                 if(key(_space))                                         // generar disparo tipo bomba..
  •                         if(available_bomb == true)
  •                                 sound(sfx_pre_bomba);
  •                                 if(last_key==4)
  •                                         for(anima_steep=0;anima_steep<9;anima_Steep++)
  •                                                 draw_text(0,"ATACK",4,x-scroll[0].x0,y-25-scroll[0].y0,-10,0,100,100,0,0,0,0,1);
  •                                                 draw_graphic(f_player,anima_shot2_down[anima_steep],x-scroll[0].x0,y-scroll[0].y0,z,resolution,angle,100,100);
  •                                                 frame;
  •                                         end
  •                                         SHOT_bomba(x,y,"abajo");
  •                                 end
  •                                
  •                                 if(last_key==3)
  •                                         for(anima_steep=0;anima_steep<9;anima_Steep++)
  •                                                 draw_text(0,"ATACK",4,x-scroll[0].x0,y-25-scroll[0].y0,-10,0,100,100,0,0,0,0,1);
  •                                                 draw_graphic(f_player,anima_shot2_up[anima_steep],x-scroll[0].x0,y-scroll[0].y0,z,resolution,angle,100,100);
  •                                                 frame;
  •                                         end
  •                                         SHOT_bomba(x,y,"arriba");
  •                                 end
  •  
  •                                 if(last_key==1)
  •                                         for(anima_steep=0;anima_steep<9;anima_Steep++)
  •                                                 draw_text(0,"ATACK",4,x-scroll[0].x0,y-25-scroll[0].y0,-10,0,100,100,0,0,0,0,1);
  •                                                 draw_graphic(f_player,anima_shot2_side[anima_steep],x-scroll[0].x0,y-scroll[0].y0,z,resolution,angle,100,100);
  •                                                 frame;
  •                                         end
  •                                         SHOT_bomba(x,y,"izquierda");
  •                                 end
  •  
  •                                 if(last_key==2)
  •                                         for(anima_steep=0;anima_steep<9;anima_Steep++)
  •                                                 draw_text(0,"ATACK",4,x-scroll[0].x0,y-25-scroll[0].y0,-10,0,100,100,0,0,0,0,1);
  •                                                 draw_graphic(f_player,anima_shot2_side[anima_steep],x-scroll[0].x0,y-scroll[0].y0,z,resolution,angle,100,100,0,0,0,1,0);
  •                                                 frame;
  •                                         end
  •                                         SHOT_bomba(x,y,"derecha");
  •                                 end
  •                         end
  •                 end
  •  
  •                
  •                
  •                
  •                
  •                
  •                
  •                
  •                
  •                 if(last_key==3 && map_get_pixel(f_zone,3,x,y-2) <> 0)           // si bajando toco dureza..
  •                         x=x_buffer;
  •                         y=y_buffer;
  •                 end
  •                 if(last_key==4 && map_get_pixel(f_zone,3,x,y+4) <> 0)           // si subiendo toco dureza..
  •                         x=x_buffer;
  •                         y=y_buffer;
  •                 end
  •                 if(last_key==1 && map_get_pixel(f_zone,3,x-2,y) <> 0)           // si a la izquierda toco dureza..
  •                         x=x_buffer;
  •                         y=y_buffer;
  •                 end
  •                 if(last_key==2 && map_get_pixel(f_zone,3,x+2,y) <> 0)           // si a la derecha toco dureza..
  •                         x=x_buffer;
  •                         y=y_buffer;
  •                 end
  •                
  •                 draw_text(0,"Player 1",4,x-scroll[0].x0,y-25-scroll[0].y0,-10,0,100,100,0,0,0,0,1);
  •                
  •                
  •                 //--------------------------UPDATE NET POSITION---------------------------------------
  •                 players[net.player_id].x_ = x;                                                                  // mi coordenada X..
  •                 players[net.player_id].y_ = y;                                                                  // mi coordenada Y..
  •                 players[net.player_id].graph_ = net_graph_;                                     // mi gráfico..
  •                 players[net.player_id].flags_ = net_flags_;                                     // mi flags..
  •                 if(exists(id_my_shot))                                                                                  // Si existe mi disparo..
  •                         players[net.player_id].x_shot_ = id_my_shot.x;                          // envio su posición..
  •                         players[net.player_id].y_shot_ = id_my_shot.y;                          // envio su posición..
  •                         players[net.player_id].angle_shot_ = id_my_shot.angle;  // envio su angle..
  •                         players[net.player_id].graph_shot_ = id_my_shot.graph;  // envio su gráfico..
  •                                 else                                                                                                            // si no existe mi disparo..
  •                                         players[net.player_id].x_shot_ = -100;                          // mando a las replicas de mi disparo en los otros clientes fuera del scroll..
  •                                         players[net.player_id].y_shot_ = -100;                          // mando a las replicas de mi disparo en los otros clientes fuera del scroll..
  •                 end    
  •                 //------------------------------------------------------------------------------------
  •                 frame;
  •         end
  • end



Modificando todas las variables desde el mismo punto se ahorra bastante ancho de banda.
User avatar
erkosone
 
Posts: 10654
Joined: Tue Feb 24, 2009 2:13 pm
Location: Barcelona.

Re: [GAME] Rosie ~ The Rascal

Postby SimulatorOne » Sun Apr 08, 2012 2:29 am

si, ya me di cuenta de eso.

tuve problemas con el chat, por que se me replicaban los mensajes, para el servidor bien... pero para el Segundo cliente 2 veces, el 3r Cliente 3 veces... y el 4.... 4 mensajes.
pude controlar eso, con un variable que hace de conta texto de chat, esto lo controla el servidor.
los Clientes lo consultan para evitar Clonaciones de chat.

no se si es a lo que te refieres.

pero gracias al Servidor puedo tener un control del envio de datos a los clientes.
Solo que los clientes hay que pulirlo mucho.

me resulta mas complejo programar el cliente , que el servidor :P
User avatar
SimulatorOne
 
Posts: 6626
Joined: Tue Nov 17, 2009 2:52 pm
Location: Barcelona

Re: [GAME] Rosie ~ The Rascal

Postby erkosone » Fri Apr 13, 2012 2:41 am

Como lo llevas Simu? Algo jugable?
User avatar
erkosone
 
Posts: 10654
Joined: Tue Feb 24, 2009 2:13 pm
Location: Barcelona.

Re: [GAME] Rosie ~ The Rascal

Postby SimulatorOne » Sat Apr 14, 2012 2:17 pm

estoy tomandome un descanso, de unos dias con Gemix, asi reflexiono mentalmente y hago apuntes.
User avatar
SimulatorOne
 
Posts: 6626
Joined: Tue Nov 17, 2009 2:52 pm
Location: Barcelona

PreviousNext

Return to Proyectos WIP

Who is online

Users browsing this forum: No registered users and 1 guest