Cual es el mejor sistema...

Started by BlySntK, March 19, 2012, 01:38:23 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

BlySntK

Buenas, al estar con un plataformas... Necesito pasar de una pantalla a otra y, aunque ya no se repiten los procesos, me da problemas para poner ciertas cosas en la pantalla en cuestión... Luego, al volver al proceso "clave", se me vuelve el código un poco inestable, no se comporta como debería...
Esnucándote contra la pared no sé si conseguiré mucho, mejor lo pruebo y salímos de dudas ^_^
-------------------------------------------------------
Blaisantka Games > (Official developer web site)

haitortiya

Buenas  BlySNtk tengo mis dos dudillas pequeñas.
1. Quieres guardar el estado de una fase y pasar a otra nueva.
2.  O lo que quieres es matar por completo la fase actual y recrear una nueva con las ¿caracteristicas actuales?

Soluciones que te doy para las dudas...
1. Guardar el estado de una fase lo puedes hacer facilmente redireccionandolo a unos DAT, y que cada vez que quieras guardar se
sobre escriba sin ningun problema, con las funciones save y load. Por ejemplo: Quieres que cuando tu campeon pase de fase todo
se ponga como deve, borrando enemigos, y poniendo los nuevos, pero a su vez, que si muere en la fase siguiente, que vuelva a la
primera. Cuando pasa de fase lo guardas y mandas un let_me_alone(). Cuando muera, usas load.

2. A esto no le veo ningun problema, matas todo y vuelves a invocar, recuerda que las globales no se borran, y si quieres mantener
alguna private, redireccionala a una global y en el begin de la siguiente fase la lees.

No se si me he explicado, y tampoco se si te he respondido lo que querais oir jeje, expone tu duda de una forma mas clara.

Un saludo, :)
Mi pagina web, donde cuelgo todos mis Proyectos

Gracias por entrar y ver su contenido

http://haitortiyagames.com.ar/

El Ultimo Dominador!!!!
http://haitortiyagames.com.ar/elultimodominador/inicio.html

BlySntK

Quote from: haitortiya on March 19, 2012, 06:57:16 PM
Buenas  BlySNtk tengo mis dos dudillas pequeñas.
1. Quieres guardar el estado de una fase y pasar a otra nueva.
2.  O lo que quieres es matar por completo la fase actual y recrear una nueva con las ¿caracteristicas actuales?

Soluciones que te doy para las dudas...
1. Guardar el estado de una fase lo puedes hacer facilmente redireccionandolo a unos DAT, y que cada vez que quieras guardar se
sobre escriba sin ningun problema, con las funciones save y load. Por ejemplo: Quieres que cuando tu campeon pase de fase todo
se ponga como deve, borrando enemigos, y poniendo los nuevos, pero a su vez, que si muere en la fase siguiente, que vuelva a la
primera. Cuando pasa de fase lo guardas y mandas un let_me_alone(). Cuando muera, usas load.

2. A esto no le veo ningun problema, matas todo y vuelves a invocar, recuerda que las globales no se borran, y si quieres mantener
alguna private, redireccionala a una global y en el begin de la siguiente fase la lees.

No se si me he explicado, y tampoco se si te he respondido lo que querais oir jeje, expone tu duda de una forma mas clara.

Un saludo, :)

Me podrías exponer un código simple con dos pantallas básicas haitor? Es decir, una panatalla primera, con un par de durezas (da igual que no existan, ponlas hipotéticamente ya las adaptaría yo) y invocación de un personaje e invocación de una pantalla más, para ver cómo lo haces. Yo, tal cual lo tengo, estoy trabajando con un proceso general (tipo main pero sin ser main, porque al main lo mato sin necesidad de volver a él) y los demás procesos los llamo de la siguiente manera; al personaje lo llamo al inicio desde begin, con el scroll y su vida (otro proceso más) y logo, dentro de un loop/end general la detección de durezas y la invocación a una de las fases (o subfases) con más niveles que serán los hijos de éste último, y así, de éste proceso padre (que es hijo del proceso general) tendríamos que poder volver y matarlo con un break a dicho proceso general para poder continuar en él. Te comento también, que probé a hacer dos procesos personaje, uno general y otro para estos niveles secundarios y no me daba demasiado problema pero me saltaban errores tontos con las letras...
Esnucándote contra la pared no sé si conseguiré mucho, mejor lo pruebo y salímos de dudas ^_^
-------------------------------------------------------
Blaisantka Games > (Official developer web site)

haitortiya

Bueno vamos a ver, te pongo la estructura de lo que te estoi diciendo, asi te enteraras mejor.

Proceso manager ( Arbitro )
private
   int fase;
   int simular_begin;
    begin
        let_me_alone();
        ...
             loop
                 if ( fase == 1 )
                           if ( simular_begin == 0 )
                                   scroll ...
                                   campeon, enemigos, objetos,...  Todo lo que quieras*
                                   simular_begin = 1;
                            end
                      if ( vida < 0 ) efectos = 1; end ( Es un ejemplo, aqui ahora pondras el dinamismo del mapa, lo que ocurre)
                      if ( campeon_global.x > 1000000 ) agua = false; end...
                      Si quieres que de esta fase vaya guardando la vida, por ejemplo, haces esto...

                      guardar_fases [vida] = vida_actual;
                      save ( guardar.dat , guardar_fases );

                  end

                  if ( fase == 2 )
                            if ( simular_begin == 1 )
                                   let_me_alone();

                                   load ( guardar.dat , guardar_fases ) ( si antes has guardado algo... )
                                   vida_actual = guardar_fases [vida];

                                    scroll ...
                                    campeon, enemigos, objetos,...  Todo lo que quieras*
                                    simular_begin = 2;
                             end
                       if ( vida < 0 ) efectos = 1; end ( Es un ejemplo, aqui ahora pondras el dinamismo del mapa, lo que ocurre)
                       if ( campeon_global.x > 1000000 ) agua = false; end...
                   end


Eso ha sido un ejemplo rapido de lo que deverias hacer si lo que QUIERES ES GUARDAR PARTE DE LA FASE ANTERIOR PARA LA
SIGUIENTE. Ahora, te pongo un ejemplo real de mi juego "Combat Arena", el como equilibra las fases. Que lo que hago es
que cada fase sea un proceso, y este se invoque desde el manager, en vez de que el manager sea quien administre los mapas
y todo
process nivel1()
    private
        puntos_invocar_campaña;
       
        begin
        //Carga el FPG que necesita para trabajar
        if ( cargar_scroll == 0 )        //Controlador para que no lo invoque cada vez que entre, lo cargue una vez, y ya esta
            fpgs [ _campana1 ] = load_fpg ( "images/campana1.fpg" );
            cargar_scroll = 1;
        end
        //Inicia la version del nivel
        file = fpgs [ _Mapas ];
        mapas_durezas = _campana1;        //Deriva todas las colisiones con las durezas a el archivo campaña 1 ( FPG )
        delete_text(all_text);     //borrar todos los textos
        puntos_invocar_campaña = 0;
        nivel = 1;
        puntos_invocar = 1;        //Creamos un contador que proporcionara al campeon invocar todo lo que este en 1 de puntos_invocar
        pantalla = 1;
        pantalla_durezas = 2;
    //logo principal
        graph = 997;
        x = 600;
        y = 50;
        size = 50;
       
    presentacion_campaña();
       
    //Invocaremos los cofres y los puntos de control
    guardar( 12340 , 580 , 117);
    guardar( 20020 , 530 , 117);
    guardar( 18640 , 1050 , 117);
    guardar( 16795 , 2020 , 117);
    guardar( 20785 , 1564 , 117);

    tesoros ( 17620 , 1260 );
    tesoros ( 18985 , 582 );
    tesoros ( 21295 , 526 );
    tesoros ( 17845 , 580 );
    tesoros ( 14935 , 580 );
    tesoros ( 13855 , 2020 );
    tesoros ( 19285 , 2020 );
    tesoros ( 20710 , 1795 );
   
    portales ( 22090 , 1920 );
    portales ( 22000 , 530 );
    //Musica de la campaña
    play_wav ( sfx [ 7 ] , 99);
   
                            //iNVOCA A LOS DISTINTOS COMPLEMENTO DE LA CAMPAÑA
                    marcador_uno();        //Invoca el proceso que controla todos los marcadores del jugador uno   
                            //Variables de los premios que lleva conseguidos y el dinero
                    //Write (fuente_dinero, 50, 70 , 0 , "Puntos:" );   
                    //Write_var (fuente_dinero, 200, 73 , 0 , puntos_campaña1 );   
                    //Write (fuente_dinero, 300, 70 , 0 , "Tesoros:" );   
                    //Write_var (fuente_dinero, 470, 73  , 0 , tesoros_campaña1 );
                    Write (fuente_dinero, 50, 550 , 0 , "Puntos:" );   
                    Write_var (fuente_dinero, 200, 553 , 0 , puntos_campaña1 );   
                    Write (fuente_dinero, 300, 550 , 0 , "Tesoros:" );   
                    Write_var (fuente_dinero, 470, 553  , 0 , tesoros_campaña1 );
                    Write (fuente_dinero, 700, 25 , 0 , "Jugador Dos      Presiona ALT" );                   
                   
                id_campeon_campaña1 = campeon_campaña();        //Coloca la cmara sobre este y lo llama al proceso
                start_scroll ( 0 ,fpgs [ mapas_durezas ] , pantalla, pantalla_durezas, 0 , 12 );
                scroll[0].camera = id_campeon_campaña1;
        loop
            if (key (_esc) AND NOT pausado ) pausa(); end            //pausa
           
            if ( key (_alt) and puntos_invocar_campaña == 0)
                id_campeon_campaña2 = campeon_campaña2();
                puntos_invocar_campaña ++;
                marcador_dos();
                delete_text(all_text);     //borrar todos los textos
                    Write (fuente_dinero, 50, 550 , 0 , "Puntos:" );   
                    Write_var (fuente_dinero, 200, 553 , 0 , puntos_campaña1 );   
                    Write (fuente_dinero, 300, 550 , 0 , "Tesoros:" );   
                    Write_var (fuente_dinero, 470, 553  , 0 , tesoros_campaña1 );
            end
        frame;
                end
            frame;
        end


Un saludo, esta ayuda tiene precio, entra en la SECCION PROYECTOS!! jeje Un saludo :)
Mi pagina web, donde cuelgo todos mis Proyectos

Gracias por entrar y ver su contenido

http://haitortiyagames.com.ar/

El Ultimo Dominador!!!!
http://haitortiyagames.com.ar/elultimodominador/inicio.html

BlySntK

#4
Quote from: haitortiya on March 19, 2012, 09:58:20 PM
Bueno vamos a ver, te pongo la estructura de lo que te estoi diciendo, asi te enteraras mejor.

Proceso manager ( Arbitro )
private
   int fase;
   int simular_begin;
    begin
        let_me_alone();
        ...
             loop
                 if ( fase == 1 )
                           if ( simular_begin == 0 )
                                   scroll ...
                                   campeon, enemigos, objetos,...  Todo lo que quieras*
                                   simular_begin = 1;
                            end
                      if ( vida < 0 ) efectos = 1; end ( Es un ejemplo, aqui ahora pondras el dinamismo del mapa, lo que ocurre)
                      if ( campeon_global.x > 1000000 ) agua = false; end...
                      Si quieres que de esta fase vaya guardando la vida, por ejemplo, haces esto...

                      guardar_fases [vida] = vida_actual;
                      save ( guardar.dat , guardar_fases );

                  end

                  if ( fase == 2 )
                            if ( simular_begin == 1 )
                                   let_me_alone();

                                   load ( guardar.dat , guardar_fases ) ( si antes has guardado algo... )
                                   vida_actual = guardar_fases [vida];

                                    scroll ...
                                    campeon, enemigos, objetos,...  Todo lo que quieras*
                                    simular_begin = 2;
                             end
                       if ( vida < 0 ) efectos = 1; end ( Es un ejemplo, aqui ahora pondras el dinamismo del mapa, lo que ocurre)
                       if ( campeon_global.x > 1000000 ) agua = false; end...
                   end


Eso ha sido un ejemplo rapido de lo que deverias hacer si lo que QUIERES ES GUARDAR PARTE DE LA FASE ANTERIOR PARA LA
SIGUIENTE. Ahora, te pongo un ejemplo real de mi juego "Combat Arena", el como equilibra las fases. Que lo que hago es
que cada fase sea un proceso, y este se invoque desde el manager, en vez de que el manager sea quien administre los mapas
y todo
process nivel1()
    private
        puntos_invocar_campaña;
       
        begin
        //Carga el FPG que necesita para trabajar
        if ( cargar_scroll == 0 )        //Controlador para que no lo invoque cada vez que entre, lo cargue una vez, y ya esta
            fpgs [ _campana1 ] = load_fpg ( "images/campana1.fpg" );
            cargar_scroll = 1;
        end
        //Inicia la version del nivel
        file = fpgs [ _Mapas ];
        mapas_durezas = _campana1;        //Deriva todas las colisiones con las durezas a el archivo campaña 1 ( FPG )
        delete_text(all_text);     //borrar todos los textos
        puntos_invocar_campaña = 0;
        nivel = 1;
        puntos_invocar = 1;        //Creamos un contador que proporcionara al campeon invocar todo lo que este en 1 de puntos_invocar
        pantalla = 1;
        pantalla_durezas = 2;
    //logo principal
        graph = 997;
        x = 600;
        y = 50;
        size = 50;
       
    presentacion_campaña();
       
    //Invocaremos los cofres y los puntos de control
    guardar( 12340 , 580 , 117);
    guardar( 20020 , 530 , 117);
    guardar( 18640 , 1050 , 117);
    guardar( 16795 , 2020 , 117);
    guardar( 20785 , 1564 , 117);

    tesoros ( 17620 , 1260 );
    tesoros ( 18985 , 582 );
    tesoros ( 21295 , 526 );
    tesoros ( 17845 , 580 );
    tesoros ( 14935 , 580 );
    tesoros ( 13855 , 2020 );
    tesoros ( 19285 , 2020 );
    tesoros ( 20710 , 1795 );
   
    portales ( 22090 , 1920 );
    portales ( 22000 , 530 );
    //Musica de la campaña
    play_wav ( sfx [ 7 ] , 99);
   
                            //iNVOCA A LOS DISTINTOS COMPLEMENTO DE LA CAMPAÑA
                    marcador_uno();        //Invoca el proceso que controla todos los marcadores del jugador uno   
                            //Variables de los premios que lleva conseguidos y el dinero
                    //Write (fuente_dinero, 50, 70 , 0 , "Puntos:" );   
                    //Write_var (fuente_dinero, 200, 73 , 0 , puntos_campaña1 );   
                    //Write (fuente_dinero, 300, 70 , 0 , "Tesoros:" );   
                    //Write_var (fuente_dinero, 470, 73  , 0 , tesoros_campaña1 );
                    Write (fuente_dinero, 50, 550 , 0 , "Puntos:" );   
                    Write_var (fuente_dinero, 200, 553 , 0 , puntos_campaña1 );   
                    Write (fuente_dinero, 300, 550 , 0 , "Tesoros:" );   
                    Write_var (fuente_dinero, 470, 553  , 0 , tesoros_campaña1 );
                    Write (fuente_dinero, 700, 25 , 0 , "Jugador Dos      Presiona ALT" );                   
                   
                id_campeon_campaña1 = campeon_campaña();        //Coloca la cmara sobre este y lo llama al proceso
                start_scroll ( 0 ,fpgs [ mapas_durezas ] , pantalla, pantalla_durezas, 0 , 12 );
                scroll[0].camera = id_campeon_campaña1;
        loop
            if (key (_esc) AND NOT pausado ) pausa(); end            //pausa
           
            if ( key (_alt) and puntos_invocar_campaña == 0)
                id_campeon_campaña2 = campeon_campaña2();
                puntos_invocar_campaña ++;
                marcador_dos();
                delete_text(all_text);     //borrar todos los textos
                    Write (fuente_dinero, 50, 550 , 0 , "Puntos:" );   
                    Write_var (fuente_dinero, 200, 553 , 0 , puntos_campaña1 );   
                    Write (fuente_dinero, 300, 550 , 0 , "Tesoros:" );   
                    Write_var (fuente_dinero, 470, 553  , 0 , tesoros_campaña1 );
            end
        frame;
                end
            frame;
        end


Un saludo, esta ayuda tiene precio, entra en la SECCION PROYECTOS!! jeje Un saludo :)

Bien, lo volví a recomenzar semi de cero, ya que las declaraciones de variables las tengo intactas y me funcionan muy bien y los primeros procesos iniciales también. He quitado muchas sentencias que me he dado cuenta que sobraban y me quitaban rendimiento y ahora, tal cual lo tengo, me falta añadir descontarle vidas al jugador pero bueno, no es importante (o eso espero...). Lo que me jode y no sé por qué razón lo hace, es que, tras salir de una pantalla e ir a la general, ya que al reves no lo puede hacer porque no hay nada que borrar, es que, cuando salimos por una puerta, como pregunto si deseamos salir, pues al darle que sí, borramos el texto y salimos, volviendo al inicio... la extraña circunstancia viene cuando, da igual que le digas que sí o que no... porque en ambas decisiones debe borrar el texto que sale, es... que cuando lo pruebo muchas veces... llega un momento en que las letras no salen (como si se saltara el texto a poner y pasara directamente al loop) pero puedo elegir qué hacer, y es entonces cuando SÓLO se borra una parte del texto donde pongo el nombre del personaje... Las vidas, en cambio, se mantienen todo el rato... Un expediente X que no comprendo por más que lo depure... Ya que depurándolo, todo funciona sin problemas, así que no sé que puede estar fallando... Hasta incluso estoy por, en vez de poner texto, poner una pequeña imagen (un icono) con la vida en texto, ya que es numerico y no se borra y a ver si así ya no me da problemas... ¿Qué opináis?
Esnucándote contra la pared no sé si conseguiré mucho, mejor lo pruebo y salímos de dudas ^_^
-------------------------------------------------------
Blaisantka Games > (Official developer web site)

haitortiya

Bueno primera anotacion, vaya parrafada!! Xdd Aqui lo de poner las cosas por puntos no lo aprende la gente.

Segundo el resumen que voi a hacer de tu texto es este, tienes bastantes problemas con los textos, te voy a dar tres recomendaciones:

- Los textos nunca los dupliques, intenta revisar todos que NINGUNO  se invoque dos veces, ya que lso write_var aun estado en el
begin se actualizan. Si los duplicas a la hora de borrarlos cascara.

- Siempre invocar un texto con un identificador ( texto [1] = write... )

- Si te viene mejor usar delete_text(all_text) usalo, que este no da fallos.

Un saludo, espero haber resuelto tu duda
Mi pagina web, donde cuelgo todos mis Proyectos

Gracias por entrar y ver su contenido

http://haitortiyagames.com.ar/

El Ultimo Dominador!!!!
http://haitortiyagames.com.ar/elultimodominador/inicio.html

BlySntK

Quote from: haitortiya on March 20, 2012, 03:34:25 PM
Bueno primera anotacion, vaya parrafada!! Xdd Aqui lo de poner las cosas por puntos no lo aprende la gente.

Segundo el resumen que voi a hacer de tu texto es este, tienes bastantes problemas con los textos, te voy a dar tres recomendaciones:

- Los textos nunca los dupliques, intenta revisar todos que NINGUNO  se invoque dos veces, ya que lso write_var aun estado en el
begin se actualizan. Si los duplicas a la hora de borrarlos cascara.

- Siempre invocar un texto con un identificador ( texto [1] = write... )

- Si te viene mejor usar delete_text(all_text) usalo, que este no da fallos.

Un saludo, espero haber resuelto tu duda

Siento la parrafada anterior xD No me contuve, jejeje Bueno, voy a ir cerrando el tema porque ya me está funcionando el código bastante bien y dos de las pantallas me funcionan perfectamente. Al final no opté por los textos, sólo uno porque no se me borra en ningún momento y tampoco necesito que se borre a no ser que sea fin de la partida completamente y del juego. Por lo demás, todo perfecto, hice lo que se me ocurrió por la mañana y va sin problemas.

Te agradezco haitor que estés tan pluriempleado xD Al final vas a ser el brazo derecho de la rata xD Que, a todo esto, no sé dónde parará... Pero weno... Cierro tema y cierro boca xD
Esnucándote contra la pared no sé si conseguiré mucho, mejor lo pruebo y salímos de dudas ^_^
-------------------------------------------------------
Blaisantka Games > (Official developer web site)