Autor Tema: Problemas con el Size_x  (Leído 4651 veces)

Arcontus

  • Sr. Member
  • ****
  • Mensajes: 362
  • Karma: 13
    • 5Leaps
Problemas con el Size_x
« en: Febrero 18, 2012, 10:20:08 pm »
Buenas,

desde que uso la función size_x esta parece darme problemas si le paso un valor por debajo de 5. Para empezar, no se pinta bien, pero lo más curioso es que en determinadas circunstancias me "explota" el programa.
La función que hago servir es esta:

Código: [Seleccionar]
PROCESS GUI_Barras(int color)
PRIVATE
    int contador;
    int *cantidad, *maxi;
BEGIN
    file=interfazFPG;
    graph = color;
    z = Z_INTERFAZ+1;
    switch (color)
        case BARRA_VERDE:
            x = 444;
                y = 630;
                cantidad = &(GUI_CONTROL.barra_verde_actual);
                maxi = &(GUI_CONTROL.barra_verde_max);
        END
        case BARRA_AMARILLA:
            x = 444;
                y = 621;
                cantidad = &(GUI_CONTROL.barra_azul_actual);
                maxi = &(GUI_CONTROL.barra_azul_max);
        END
        case BARRA_AZUL:
            x = 444;
                y = 612;
                cantidad = &(GUI_CONTROL.barra_amarilla_actual);
                maxi = &(GUI_CONTROL.barra_amarilla_max);
        END
    END
    LOOP
        /*
        contador = (*cantidad * 100)/ *maxi;
        if (contador > 5)
            size_x = contador;
        else
            size_x = 5;
        END
        */

        contador = (*cantidad * 100)/ *maxi;
        size_x = contador;

        FRAME;
    END
END

Podéis ver un trozo de código que está comentado, es para limitar que no se haga un size inferior a 5, lo cual evita que el programa "explote".

Es decir si comentamos:
Código: [Seleccionar]
  contador = (*cantidad * 100)/ *maxi;
         size_x = contador;
 

y descomentamos:
Código: [Seleccionar]
contador = (*cantidad * 100)/ *maxi;
         if (contador > 5)
             size_x = contador;
         else
             size_x = 5;
         END
Entonces funciona perfectamente.

La función que llama a las barras está en el main y es la siguiente:
Código: [Seleccionar]
PROCESS main()
BEGIN
    set_mode(1024,768,32, mode_window);
    GUI_init();                          //Inicializamos la libreria.
    GUI_Barras(BARRA_VERDE);
    GUI_Barras(BARRA_AZUL);
    GUI_Barras(BARRA_AMARILLA);
    while(!key(_esc))
        GUI_CONTROL.barra_amarilla_actual = rand(0,100);
        GUI_CONTROL.barra_azul_actual = rand(0,100);
        GUI_CONTROL.barra_verde_actual = rand(0,100);
        frame;
    END
    exit();
END

FUNCTION GUI_init()
BEGIN
    interfazFPG = load_fpg(".\..\FPG\interfaz32.fpg");
    GUI_hotkeys_default();
    GUI_CONTROL.barra_verde_max = 100;
    GUI_CONTROL.barra_azul_max = 100;
    GUI_CONTROL.barra_amarilla_max = 100;
END

Bien, pues ese codigo me peta si no limito el tamaño de las barras a más de 5.

He tratado de crear un nuevo proyecto replicando los mismos pasos que realizo en el otro, y creando un nuevo FPG solo con las barras, pero en este caso funciona correctamente y no da error de ejecución.
Adjunto fichero DEBUG donde se observa que las lineas no se pintan bien siempre, pero no se porqué aquí no da error de ejecución.

¿Alquien sabe lo que sucede?
5Leaps, el primer juego comercial desarrollado para BennuGD. http://www.5leaps.com

SplinterGU

  • Administrator
  • *****
  • Mensajes: 13002
  • Karma: 379
Re:Problemas con el Size_x
« Respuesta #1 en: Febrero 19, 2012, 01:34:48 am »
que version de bennugd estas usando?

cuando dices que revienta el programa? lo estoy corriendo desde hace unos 10 minutos  y no muere.

si estas usando una version antigua de BennuGD, puede ser eso, porque un bug similar se corrigio hace tiempo.
« última modificación: Febrero 19, 2012, 01:38:49 am por SplinterGU »
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Arcontus

  • Sr. Member
  • ****
  • Mensajes: 362
  • Karma: 13
    • 5Leaps
Re:Problemas con el Size_x
« Respuesta #2 en: Febrero 22, 2012, 06:43:11 pm »
Acabo de actualizar a la última versión, he vuelto a probar y parece que se ha corregido el problema.

Gracias por la ayuda,

Saludos!
5Leaps, el primer juego comercial desarrollado para BennuGD. http://www.5leaps.com

Arcontus

  • Sr. Member
  • ****
  • Mensajes: 362
  • Karma: 13
    • 5Leaps
Re:Problemas con el Size_x
« Respuesta #3 en: Febrero 25, 2012, 01:35:21 pm »
Pues no se ha correjido el problema completamente.

Si es cierto que ahora sucede con mucha menos frecuencia, es totalmente aleatorio. De 10 veces que se ejecuta fallan 2 o 3, y siempre al principio trás 1 o 2 segundo de ejecución, sino ya no he visto que fallara. Si por contra limito el tamaño para que no se reduzca la barra por debajo de 10 entonces funciona siempre bien. He observado que por debajo de 10 las barras no se pintan correctamente, sino que hace algo extraño incluso cambian de color.

SplinterGU, en el ejemplo que adjunté no conseguí reproducir el problema.  El programa lo adjunté para que vieráis como tengo codificado el tema de barras, por si veiais algo mal.

El problema se vuelve más evidente cuantas más funciones tengas corriendo, como si hubiera algún puntero loco que se activa cuando baja de ese valor en el código.

En fin, que con la funcion "size_x" me huele a algo que no está del todo bien, o sino no entiendo que me sucede...
5Leaps, el primer juego comercial desarrollado para BennuGD. http://www.5leaps.com

SplinterGU

  • Administrator
  • *****
  • Mensajes: 13002
  • Karma: 379
Re:Problemas con el Size_x
« Respuesta #4 en: Febrero 25, 2012, 04:16:35 pm »
necesito un problema de ejemplo para repetir el problema.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Arcontus

  • Sr. Member
  • ****
  • Mensajes: 362
  • Karma: 13
    • 5Leaps
Re:Problemas con el Size_x
« Respuesta #5 en: Febrero 25, 2012, 09:59:46 pm »
En el código adjunto aun que no "peta" se observa lo que comento de que no pinta bien las barras cuando el size es inferior a 10. Lo puedes verificar tu mismo.

La 3a barra comenzando por abajo debería ser rosa, no azul y la primera de arriba debería ser amarilla no naranja. Esto les sucede a todas las barras cuando tienen un tamaño reducido y quizás sea un sintoma del problema. Te da eso alguna pista?
« última modificación: Febrero 25, 2012, 10:02:08 pm por Arcontus »
5Leaps, el primer juego comercial desarrollado para BennuGD. http://www.5leaps.com

SplinterGU

  • Administrator
  • *****
  • Mensajes: 13002
  • Karma: 379
Re:Problemas con el Size_x
« Respuesta #6 en: Febrero 25, 2012, 10:41:37 pm »
eso no puede ser problema del size_x, podria ser otra cosa... pero el motor no cambia los colores, y menos parejo... quizas si usas 8 bits puede que las paletas cambien, pero no por size_x, sino por alguna otra cosa.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

  • Administrator
  • *****
  • Mensajes: 13002
  • Karma: 379
Re:Problemas con el Size_x
« Respuesta #7 en: Febrero 25, 2012, 11:07:26 pm »
veo que algo raro hay, lo pondre en pendiente.

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

SplinterGU

  • Administrator
  • *****
  • Mensajes: 13002
  • Karma: 379
Re:Problemas con el Size_x
« Respuesta #8 en: Febrero 25, 2012, 11:16:53 pm »
ya veo, en tu caso, a partir de size_x = 8 funciona bien, luego parece como que lee parte del siguiente, por eso, es probable que haga el crash...

te agradeceria si pudieras probar con fpg de 8 y 16 bits... yo ahora tengo que salir, pero si puedes hacer esas pruebas, me adelantarias tiempo...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

  • Administrator
  • *****
  • Mensajes: 13002
  • Karma: 379
Re:Problemas con el Size_x
« Respuesta #9 en: Febrero 26, 2012, 03:36:42 am »
este codigo sirve para ver el problema

Código: [Seleccionar]
PROCESS GUI_Barras(file,graph,x,y,size_x)
BEGIN
LOOP
FRAME;
END
END

PROCESS main()
PRIVATE
int indice;
int miFPG;
END
BEGIN
set_mode(640,480,32, mode_window);

miFPG = load_fpg("miFPG.fpg");

for(indice = 0; indice < 12; indice++)
GUI_Barras(miFPG,indice+1,320,20+(indice* 20),7);
END

while(!key(_esc))
frame;
END

exit();
END
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

  • Administrator
  • *****
  • Mensajes: 13002
  • Karma: 379
Re:Problemas con el Size_x
« Respuesta #10 en: Febrero 26, 2012, 04:20:05 am »
si, se rompe mal...

Código: [Seleccionar]
PROCESS GUI_Barras(file,graph,x,y,size_x)
BEGIN
    LOOP
FRAME;
END
END

PROCESS main()
PRIVATE
int indice;
int mapas[11];
END
BEGIN
set_mode(640,480,32);

    rand_seed(get_timer());

for(indice = 0; indice < 12; indice++)
    mapas[indice]=map_new(100,7,32);
    map_clear(0,mapas[indice],rgb(rand(4,25)*10,rand(4,25)*10,rand(4,25)*10));
    end

for(indice = 0; indice < 12; indice++)
GUI_Barras(0,mapas[indice], 50,10+(indice*30),9);
GUI_Barras(0,mapas[indice],100,10+(indice*30),8);
GUI_Barras(0,mapas[indice],150,10+(indice*30),7);
GUI_Barras(0,mapas[indice],200,10+(indice*30),6);
GUI_Barras(0,mapas[indice],250,10+(indice*30),5);
GUI_Barras(0,mapas[indice],300,10+(indice*30),4);
GUI_Barras(0,mapas[indice],350,10+(indice*30),3);
GUI_Barras(0,mapas[indice],400,10+(indice*30),2);
GUI_Barras(0,mapas[indice],450,10+(indice*30),1);
END

while(!key(_esc))
frame;
END

exit();
END

depende tambien del alto del grafico.

bueno, tengo que ver como solucionarlo...

gracias.

por ahora puedes solucionarlo haciendo las barras de 100 de alto y usando size_y=7 junto al size_x que quieras.

ejemplo

Código: [Seleccionar]
PROCESS GUI_Barras(file,graph,x,y,size_x)
BEGIN
    size_y = 7;
    LOOP
FRAME;
END
END

PROCESS main()
PRIVATE
int indice;
int mapas[11];
END
BEGIN
set_mode(640,480,32);

    rand_seed(get_timer());

for(indice = 0; indice < 12; indice++)
    mapas[indice]=map_new(100,100,32);
    map_clear(0,mapas[indice],rgb(rand(4,25)*10,rand(4,25)*10,rand(4,25)*10));
    end

for(indice = 0; indice < 12; indice++)
GUI_Barras(0,mapas[indice], 50,10+(indice*30),9);
GUI_Barras(0,mapas[indice],100,10+(indice*30),8);
GUI_Barras(0,mapas[indice],150,10+(indice*30),7);
GUI_Barras(0,mapas[indice],200,10+(indice*30),6);
GUI_Barras(0,mapas[indice],250,10+(indice*30),5);
GUI_Barras(0,mapas[indice],300,10+(indice*30),4);
GUI_Barras(0,mapas[indice],350,10+(indice*30),3);
GUI_Barras(0,mapas[indice],400,10+(indice*30),2);
GUI_Barras(0,mapas[indice],450,10+(indice*30),1);
END

while(!key(_esc))
frame;
END

exit();
END

es la unica solucion temporal que tengo de momento, hasta que me siente a analizar el codigo.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

  • Administrator
  • *****
  • Mensajes: 13002
  • Karma: 379
Re:Problemas con el Size_x
« Respuesta #11 en: Febrero 26, 2012, 04:52:16 am »
bueno, creo que lo solucione... digo creo, porque realmente no tengo idea que toque... pero se ve que ahora dibuja mejor a tamaños chicos.

en fin... a probarlo...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Arcontus

  • Sr. Member
  • ****
  • Mensajes: 362
  • Karma: 13
    • 5Leaps
Re:Problemas con el Size_x
« Respuesta #12 en: Febrero 26, 2012, 11:25:49 am »
SplinterGU, probé a 8 y 16 bits tal y como pedías y sucede el mismo problema:

8Bits -->

16bits -->

Lo del size_y=7 no lo entendí, que tiene que ver una cosa con la otra??

Gracias por la ayuda.

Saludos!



5Leaps, el primer juego comercial desarrollado para BennuGD. http://www.5leaps.com

SplinterGU

  • Administrator
  • *****
  • Mensajes: 13002
  • Karma: 379
Re:Problemas con el Size_x
« Respuesta #13 en: Febrero 26, 2012, 06:05:59 pm »
si, fallaba en todos los modos... era la forma de calcular donde leer las texturas... ya lo corregi (o al menos ahora no se rompe)

perdon si no fui claro en la lluvia de respuestas anteriores.

lo del size_y=7 mira el ejemplo que puse... se debe a que tus graficos son de alto 7...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Arcontus

  • Sr. Member
  • ****
  • Mensajes: 362
  • Karma: 13
    • 5Leaps
Re:Problemas con el Size_x
« Respuesta #14 en: Marzo 05, 2012, 10:29:00 pm »
Hola SplinterGU, por fin he logrado el tiempo para descargar la ultima versión (r270), y de momento, no me peta el proyecto lo cual es muy buena señal. Aun así, en el programilla ese que adjunté más arriba, se siguen viendo en algunos casos un cambio de color en las barras cuando estas son pequeñas, por lo que "puede" que sigamos sin resolver el problema.

Te adjunto un pantallazo que acabo de hacer para que lo veas tu mismo:

Como sabes, la tercera barra por abajo, debería ser de color rosa, no azul. Obviamente no es la única barra que cambia su color cuando se reduce su tamaño.

De momento no ha vuelto a dar problemas de cuelgues en el proyecto, pero está bien que estés al tanto del "mini-bug".
« última modificación: Marzo 05, 2012, 10:30:52 pm por Arcontus »
5Leaps, el primer juego comercial desarrollado para BennuGD. http://www.5leaps.com