Bugs (antes 'Fades')

Started by Packo_z007, September 21, 2008, 01:07:47 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Packo_z007

Hola. Llevo un par de horas renegando con esto. El problema es que no se respeta el orden logico( o por lo menos el que yo espero) de la ejecucion pero si saco los fades funciona correctamente.


Process Scr_Game()
begin
   loop
      if(change_map != 0)
         say("a");
         fade(0,0,0,16);
         while(fading)
            frame;
         end
         if(Map_id = loadmap("maps/map"+change_map+".txt"))   
            fade(100,100,100,16);
            say("b");
            while(fading)
               frame;
            end
            say("c");
            change_map = 0;
         else
            say("exit");
            Endgame = 1;
         end
      end
      frame;
   end
end

La salida comentando los fades es:
a
b
c
pero con los fades es:
a
a
b
c
exit

Lo que me parece raro es que repite el "a" a lo cual le encuentro poco sentido por que despues del "a" viene un "if else" en el cual ambos miembros tienen un say (despues de "a" deberia seguir "b" o "exit"),
y de igual modo antes del "exit" deberia haber un "a" y no un "c".
¿El orden en el que escribe say no siempre es el orden en que ha sido llamado?¿o es un problema con los fades?
[STRING] *PANIC Too many strings, allocating more space

Packo_z007

corrijo.. Tenia varios procesos iguales. Se creaban "if(key())" .. lo borro en un rato
[STRING] *PANIC Too many strings, allocating more space

SplinterGU

evidentemente eso no tiene que ver con los fades, pone un ejemplo completo, mira que dentro de while (fading) tenes un frame, lo cual switchea a otro proceso... no se que haces en otros procesos... hasta que no termina el fading, no cargas el mapa...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Prg

mira, no eh trabajado tanto con problemas similares, pero observé esto.

if(change_map != 0) esto me hace pensar que change_map sería una variable de tipo int o float, o alguna numérica al menos, pero luego quieres unir cadenas de string en Map_id = loadmap("maps/map"+change_map+".txt"), aquí deberías poner itoa(change_map), para que lo cargue, (puedes intentar quitando los if's). Esa podría ser la falla.

Prueba así:

(corregido un end y la cadena)

[code language="bennu"]
Process Scr_Game();
begin
   loop
      if(change_map != 0)
                   say("a");
                  fade(0,0,0,16);
                               while(fading)
                                frame;
                                end

                 if(Map_id = loadmap("maps/map"+itoa(change_map)+".txt"))   
                               fade(100,100,100,16);
                              say("b");
                                          while(fading)
                                            frame;
                                              end
                  say("c");
                  change_map = 0;
                               end
                 
        else
                 say("exit");
                Endgame = 1;
         
      end
      frame;
   end
end[/code]

corregido sólo cadena

[code language="bennu"]
Process Scr_Game();
begin
   loop
      if(change_map != 0)
                   say("a");
                  fade(0,0,0,16);
                               while(fading)
                                frame;
                                end

                 if(Map_id = loadmap("maps/map"+itoa(change_map)+".txt"))   
                               fade(100,100,100,16);
                              say("b");
                                          while(fading)
                                            frame;
                                              end
                  say("c");
                  change_map = 0;
                 
        else
                 say("exit");
                Endgame = 1;
         end
      end
      frame;
   end
end[/code]

y puedes también probar así:

corregido sólo el end

[code language="bennu"]
Process Scr_Game();
begin
   loop
      if(change_map != 0)
                   say("a");
                  fade(0,0,0,16);
                               while(fading)
                                frame;
                                end

                 if(Map_id = loadmap("maps/map"+change_map+".txt"))   
                               fade(100,100,100,16);
                              say("b");
                                          while(fading)
                                            frame;
                                              end
                  say("c");
                  change_map = 0;
                               end
                 
        else
                 say("exit");
                Endgame = 1;
         
      end
      frame;
   end
end[/code]
en humos puedes mover la camara con los cursores. es necesario para los niveles a partir del dos :)

Packo_z007

Gracias. Ya lo habia solucionado. De todas formas, se que es poco ortodoxo sumar cadenas con numeros ¿Pero es realmente necesaria la conversion en este caso?
[STRING] *PANIC Too many strings, allocating more space

Prg

je je, sinceramente, cuando yo escribía en el div mezclaba cadenas y texto (actualmente si hago las conversiones, para evitar errores, por eso no se si funcione en el fenix, supongo que sí, pues su ya lo solucionaste...), pero como en éste caso no te funcionaba, por eso agregué esta función, para ver si se acomodaba. Bueno, ¡¡¡suerte en tu proyecto!!!
en humos puedes mover la camara con los cursores. es necesario para los niveles a partir del dos :)

Packo_z007

Bueno este problema aparentemente esta solucionado, pero tengo otro q parece mas grave. La verdad es que desde hace 4 horas estaba tratando de aislarlo. El sintoma era que despues de cambiar 6 veces de mapa el programa moria. Ademas de esto, si bien compilaba siempre, cambiando de lugar los "say", o agregando más, a veces moria antes de comenzar el juego.Con "moría" me refiero a :

bgdi.exe ha detectado un problema y debe cerrarse.

Bueno como dije, logre aislar mi problema. Consiste en que creo los fpgs a partir de imagenes cargadas con load_png  (que contienen la animacion completa), a las cuales con map_block_copy las convertia en imagenes simples.La cuestion es que este codigo que es un resumen de lo que hago cada vez que cambio de mapa ocasiona que la ejecucion termine.

Program DataBase;
private
   fpg;
   imagen;
   archivo;
   i;
end
begin
   set_fps(24,1);
   set_mode(640,480,16);
   for(i = 0;i<700;i++)
      fpg = fpg_new();
      archivo = load_png("images\Pj\0000.png");
      imagen = new_map(64,64,16);
      fpg_add(fpg,2,0,Archivo);
      fpg_add(fpg,1,0,imagen);
      map_block_copy(fpg,1,0,0,2,0,0,64,64,0);
      unload_fpg(fpg);
      unload_map(0,archivo);
      unload_map(0,imagen);
      frame;
   end
end

Nose si estoy haciendo algo incorrecto. Si en vez de 700 uso 500 como valor maximo para i, funciona correctamente (no probe otros valores). Saludos
[STRING] *PANIC Too many strings, allocating more space

SplinterGU

En la ultima version beta, hay un error con los mapas, y este sucede si se usan mas de 1000 mapas (carga/descarga) no se si este sera el caso, pero es posible...
no veo el sentido que que agreges los mapas a un fpg, es mas, te lo desaconsejo, es mas lento que usar el mapa directamente, un png en memoria no es mas que un map en memoria...
el unico formato que realmente se soporta internamente son los map, los demas son importaciones/exportaciones, desde y hacia maps.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Danielo515

No veo el motivo de agregarlos al fpg y luego hacer el map_bloc_copy, yo aprobecharía que cuando los cargas están en la  misma librería con lo cual puedes hacer facilmente un map_block_copy(0,etc,etc) a la libreria 0 que seguro que es más rápida.

Otra cosa, y esto ya es un gusto personal, yo cambiaria tu for por un from, que es más cómodo visualmente (o más bonito)
[code language="bennu" options="singleline"]from i=o to 699[/code]
Es lo mismo que tienes tu pero más corto y facil de entender.

Por cierto, splinter, dices que es un error de cargar 1000 mapas en memoria, o, a lo largo del programa, aunque descargues los mapas, cuando has ejecutado 1000 veces el load_map da error?

Packo_z007

#9
Los acomodo en fpg para tener las cosas mas o menos ordenadas. Es un fpg por cada clase de enemigo (obviamente con diferentes sprites). Lo bueno de esto es que hay solo un proceso "enemigo", al cual con cambiarle la variable "file", cambia de clase, pero no es necesario modificar el nº de graph, ya que se respeta cierto orden en todos los fpgs del mismo tipo.
De todas formas, lo del map_block_copy no es definitivo. La idea es que los fpgs ya esten armados, y en vez de este codigo solo se carguen y descarguen librerias (solo que asi es mas facil XD).

¿Habria problemas con cargar y descargar librerias? (con respecto al tema de los 1000 maps)¿o solo pasa si se cargan mapas individualmente?

PD:¿Se elimino save_fpg() ?
Edito: Me acabo de dar cuenta de que tampoco esta en fenix. La verdad nunca la habia usado.
[STRING] *PANIC Too many strings, allocating more space

SplinterGU

Quote from: Danielo515 on September 21, 2008, 01:16:56 PM
No veo el motivo de agregarlos al fpg y luego hacer el map_bloc_copy, yo aprobecharía que cuando los cargas están en la  misma librería con lo cual puedes hacer facilmente un map_block_copy(0,etc,etc) a la libreria 0 que seguro que es más rápida.

Otra cosa, y esto ya es un gusto personal, yo cambiaria tu for por un from, que es más cómodo visualmente (o más bonito)
[code language="bennu" options="singleline"]from i=o to 699[/code]
Es lo mismo que tienes tu pero más corto y facil de entender.

Por cierto, splinter, dices que es un error de cargar 1000 mapas en memoria, o, a lo largo del programa, aunque descargues los mapas, cuando has ejecutado 1000 veces el load_map da error?

si, es una estupides en el reuso de ids, que se activa cuando se usan todos los elementos ya reservados, y previamente a reservar un nuevo espacio de tamaño... inicialmente se reservan 1024... bueno, ya esta corregido en mi entorno de desarrollo, lo anuncio hace ya unos cuantos dias...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

#11
Quote from: Packo_z007 on September 21, 2008, 01:41:27 PM
Los acomodo en fpg para tener las cosas mas o menos ordenadas. Es un fpg por cada clase de enemigo (obviamente con diferentes sprites). Lo bueno de esto es que hay solo un proceso "enemigo", al cual con cambiarle la variable "file", cambia de clase, pero no es necesario modificar el nº de graph, ya que se respeta cierto orden en todos los fpgs del mismo tipo.
De todas formas, lo del map_block_copy no es definitivo. La idea es que los fpgs ya esten armados, y en vez de este codigo solo se carguen y descarguen librerias (solo que asi es mas facil XD).

¿Habria problemas con cargar y descargar librerias? (con respecto al tema de los 1000 maps)¿o solo pasa si se cargan mapas individualmente?

PD:¿Se elimino save_fpg() ?
Edito: Me acabo de dar cuenta de que tampoco esta en fenix. La verdad nunca la habia usado.

Si, habra problemas... el save_fpg, se elimino hace mucho tiempo... se va a agregar pronto...

Adjunto librerias con las correccion, supongo que funcionara, creo que no cambie ninguna estructura que afecte a estas funciones... pruebenlo y me comentan... si me confirman que funciona lo subo al site de descargas como fix.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Packo_z007

Acabo de probar lo que subiste:
Ahora el juego muere despues de dos cambios de mapa(antes eran 6), y el codigo de ejemplo ese que subi se cierra con 192 repeticiones del for.

Quote from: Packo_z007 on September 21, 2008, 04:29:35 AM

Program DataBase;
private
   fpg;
   imagen;
   archivo;
   i;
end
begin
   set_fps(24,1);
   set_mode(640,480,16);
   for(i = 0;i<700;i++)
      fpg = fpg_new();
      archivo = load_png("images\Pj\0000.png");
      imagen = new_map(64,64,16);
      fpg_add(fpg,2,0,Archivo);
      fpg_add(fpg,1,0,imagen);
      map_block_copy(fpg,1,0,0,2,0,0,64,64,0);
      unload_fpg(fpg);
      unload_map(0,archivo);
      unload_map(0,imagen);
      frame;
   end
end


De todas formas no urge una solucion. No te preocupes.
[STRING] *PANIC Too many strings, allocating more space

SplinterGU

evidentemente hay un error, en mi caso lo hace 138 veces... vamos a revisar... gracias...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

#14
Ahora si...

Download Lastest BennuGD Release: http://www.bennugd.org/node/2