Primitivas gráficas + Scroll

Started by Arcontus, August 31, 2011, 02:00:48 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Arcontus

Buenas,

estoy tratando de realizar un proceso que pinte una barra de vida (en adelante lo llamare "barra") sobre un proceso nave (en adelante nave). Esta barra ha de repintarse en caso de variar la vida de la nave. Por el momento tengo el siguiente código:

PROCESS MostrarBarraStats(int *Px, int *Py, int *numero, int *mostrar, int color, int reductor, int maximo)
PRIVATE
int var,
barraLocal;
END
BEGIN
priority=4;
ctype=c_scroll;
        resolution = RESOLUCION_PIXEL;
        region = REGION_JUEGO;

        //Escalamos el tamaño de la barra con la variable "reductor"
graph = map_new(maximo/reductor,10,32);

        //Creamos la barra.
drawing_map(0,graph);

       //configuramos el color de la barra
switch (color)
case BARRA_AZUL:
drawing_color(rgba(0,0,255,255));
END
case BARRA_VERDE:
drawing_color(rgba(0,255,0,255));
END
case BARRA_ROJA:
drawing_color(rgba(255,0,0,255));
END
case BARRA_AMARILLA:
drawing_color(rgba(255,255,0,255));
END
END

        //Pintamos el recuadro
draw_box(0,0, (*numero) / reductor, 5);
var = *numero;
z = -512;

        //Comprobamos que la barra debe seguir mostrandose
while (*mostrar)

                //Validamos si la barra ha cambiado su valor para repintarla
if (var != *numero)

                        //pintamos el mapa de transparente
map_clear(0,graph,rgba(0,0,0,0));

                        //En caso de haber barra...
if (*numero > 0)

                                //Configuramos nuevamente su color
switch (color)
case BARRA_AZUL:
drawing_color(rgba(0,0,255,255));
END
case BARRA_VERDE:
drawing_color(rgba(0,255,0,255));
END
case BARRA_ROJA:
drawing_color(rgba(255,0,0,255));
END
case BARRA_AMARILLA:
drawing_color(rgba(255,255,0,255));
END
END

                               //... y pintamos nuevamente su barra
                           draw_box(0,0, (*numero) / reductor, 5);
END
END
x = *Px;

                //Diferenciamos entre barras para no pintarlas una sobre la otra.
switch (color)
case BARRA_AZUL:
y = *Py - 480;
END
case BARRA_VERDE:
y = *Py - 400;
END
case BARRA_AMARILLA:
y = *Py - 320;
END
END
FRAME;
END

        //Eliminamos el mapa de memoria.
unload_map(0, graph);
END


El problema es que la barra inicialmente se pinta en su sitio, pero tras modificarse su valor (agrandarse o empequeñecerse), esta pasa a pintarse sobre la posición 0,0 de la pantalla, sin tener en cuenta el scroll. De hecho, al modificarse su valor, hace cosas raras. Otra observación, es que no elimina el gráfico cuando termina el proceso una vez se ha dado el problema, sino que la barra persiste en la esquina superior izquierda. ¿Alguna idea de porqué sucede esto o como solventarlo?

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

SplinterGU

porque:

1) las primitivas no trabajan con scroll
2) cuando ejecutas una primitiva sin un drawing_map previamente definido, estas creando un objeto que permacera vivo hasta que lo mates... y en este caso trabaja sobre la pantalla.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Arcontus

Quote from: SplinterGU on August 31, 2011, 02:21:35 PM
porque:

1) las primitivas no trabajan con scroll
2) cuando ejecutas una primitiva sin un drawing_map previamente definido, estas creando un objeto que permacera vivo hasta que lo mates... y en este caso trabaja sobre la pantalla.

¿Pero no se puede crear una primitiva, y asignarla al "graph" de un proceso, como si de un gráfico de fpg se tratara? Esa era la idea original...

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

SplinterGU

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

Arcontus

Splinter, te agradecería que me explicaras un poco eso del drawing_map, ya que en el código llamo a la función, pero como comentaba no se donde está el error.

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

SplinterGU

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