crear copias modificadas de un grafico

Started by laghengar, November 11, 2008, 08:15:57 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

laghengar

Hola, veran, yo quiero lo que pretendo hacer es crear una serie de procesos cuyos sprites se basan en otro tomandose como modelo al que luego le cambio de color y de forma. por ahora lo que estoy haciendo es esto:

[code language="bennu"]
process cargar_criaturas();

private
plantilla;
ancho,alto;
point_x,point_y;

graficos;
i,j;

ente padre;

begin
plantilla=load_fpg(".\plantillas.fpg");
ancho=graphic_info(plantilla,1,G_WIDTH);
alto=graphic_info(plantilla,1,G_HEIGHT);

get_point(plantilla,1,0,offset point_x,offset point_y);

padre=father;

padre.fpg_criaturas=fpg_new();
graficos=new_map(ancho,alto,16);
fpg_add(padre.fpg_criaturas,1,0,graficos);

set_point(padre.fpg_criaturas,1,0,point_x,point_y);

say("grafico de criatura cargada");

for(i=0;i<alto;i++)
   for(j=0;j<ancho;j++)
      if(map_get_pixel(plantilla,1,j,i)<>0)
         map_put_pixel(padre.fpg_criaturas,1,j,i,rgb(81+rand(-5,+5),143+rand(-5,+5),206+rand(-5,+5)));
         end
      end
   end

frame;

end
[/code]

Dudo de este método que me he inventado, porque el punto de control 0 de la copia se situa en la esquina superior izquierda, cuando el mismo punto en el gráfico de la plantilla está en el centro. Alguien puede saber por que???

Bueno, no se si sabeis algún método mejor para conseguir eso.

Un saludo enorme, cuidense y hasta luego.
!!!Blender Blender Blender yuhuuuuuuu¡¡¡ novato o_O

Prg

#1
muy buen método  :) .

La verdad no miro un error, se me ocurre que pruebes quitando el set_point o hagas un

set_point(padre.fpg_criaturas,1,0,ancho/2,alto /2);

... mejor, para que no pierdas el punto de control puedes hacer:

graficos=map_clone(plantilla,1);
y si deceas que te quede vacío haces un :
fpg_add(padre.fpg_criaturas,1,graficos,plantilla);
map_clear(padre.fpg_criaturas,1,rgb(0,0,0));

creo que cn esto harías algo parecido, pero reteniendo los puntos de control del original. (creo...).
en humos puedes mover la camara con los cursores. es necesario para los niveles a partir del dos :)

TYCO

laghengar dijo: Dudo de este método que me he inventado, porque el punto de control 0 de la copia se situa en la esquina superior izquierda, cuando el mismo punto en el gráfico de la plantilla está en el centro. Alguien puede saber por que???

Seguro que está en el centro??? porque si el punto 0 no está definido, al hacer un get_point del punto 0, creo que devuelve la esquina superior izquierda... si usas ese grafico en "graph" y efectivamente no tiene definido el punto 0, bennu lo centra, creo que esto es así.

Para lo de hacer clonados... no sé si igual te viene mejor usar map_clone();???

PD: No he mirado a fondo el código.
PD2: Para indicar los centros de los gráficos puedes usar también la función set_center();
PD3: Para conocer los centros de los gráficos puedes usar también la función GRAPHIC_INFO(INT librería, INT gráfico, G_CENTER_X y G_CENTER_Y)
Programador, Escritor/Guionista y Deportista.

Todo Modo Gráfico tiene por detrás una Línea de Comandos.

SnowCraft Remake (100%)
Rally Mortal (87%)

SplinterGU

si, yo se, porque el punto cero no debe estar seteado en el original, entonces el centro al dibujar es el centro del grafico, pero cuando haces el get_point 0 obtenes los valores reales...
seria bueno que observes los valores que retorna la funcion en los parametros y en el retorno, hay un hermoso modulo mod_say, que sirve para esta finalidad, nunca es bueno en tiempo de desarrollo trabajar a ciegas... siempre observar los valores que devuelve cada cosa...
tambien puede ser un bug, no tengo tiempo por ahora de probarlo...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

laghengar

Buenos dias, ok, en parte teneis razón, no he usado el say ya que no se usarlo para variables, miraré a ver. Aún así, según el fpg edit que estoy usando para la plantilla, el punto 0 de esa plantilla si está situada en el centro. Bueno cuando pueda intentaré usar el say a ver que dice y comento por aquí. A ver si puede ser esta noche  ;D

Muchas gracias.
!!!Blender Blender Blender yuhuuuuuuu¡¡¡ novato o_O

SplinterGU

say (string);

si pones say ("texto"+variable+"texto"+...);

o say (var)

genera una string con lo que le pases y lo imprime en el stdout (salida de consola)
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

laghengar

Buenos dias, gracias a todos, el caso es que me he dado cuenta de que el fallo viene de otro sitio, este método funciona perfectamente, un saludo.  ;)
!!!Blender Blender Blender yuhuuuuuuu¡¡¡ novato o_O