Hola. Buenos dias. Mi nombre es Gabriel. Soy de Argentina. Hace poco tiempo comence a desarrollar en bennu. Estoy haciendo un juego de naves. Qusiera saber si se puede cambiar el color de las naves q tengo cargadas en mi archivo fpg de manera de poder contar con mas enemigos que parezcan diferentes pero usando los mismos sprites. Se entiende la idea? Muchas gracias!!!!
Si tu archivo FPG es de 8 bits, puedes cambiar los colores de la paleta desde BennuGD usando color_set:
http://wiki.bennugd.org/index.php?title=Pal_set
Si lo que quieres es tener varios FPG con distintas paletas, Smart FPG Editor también te permite hacer esas modificationes (video: https://www.youtube.com/watch?v=Flv-RiA-7DM)
https://bitbucket.org/dacucar/smart-fpg-editor/src/master/
Si trabajas en 16 o 32 bits, puedes usar rgb_scale y esta función:
Function colorea_fpg(file, float r, float g, float b);
Private
new_file;
i;
Begin
new_file=fpg_new();
from i=1 to 999;
if(map_exists(file,i))
fpg_add(new_file,i,file,i);
rgbscale(new_file,i,r,g,b);
end
end
return new_file;
End
Muchas gracias! estoy tratando de usar la función... pero algo debo estar haciendo mal, estoy tratando de hacer una prueba dibujando la misma imagen, una vez sin "colorear" y luego "coloreada", pero se me muestra exactamente igual. Dejo el código
Para esta prueba estoy usando un fpg de 1 sola imagen de 32bits. Lo dejo adjunto!
Muchísimas gracias por la ayuda!
IMPORT "mod_say";
IMPORT "mod_debug";
IMPORT "mod_map";
IMPORT "mod_effects";
IMPORT "mod_proc";
IMPORT "mod_grproc";
IMPORT "mod_map";
IMPORT "mod_key";
IMPORT "mod_video";
IMPORT "mod_screen";
global
fichero;
fichero2;
end;
process main()
begin
set_mode(1024,768,32);
Set_fps(55,1);
fichero = load_fpg("main.fpg");
fichero2= colorea_fpg(fichero,0.3,0.59,0.11);
graficar(fichero,100,100);
graficar(fichero2,300,300);
loop
frame;
end
end;
process graficar(paramfichero,x,y)
begin
FILE = paramFichero;
graph = 1;
loop
frame;
end
end
function colorea_fpg(file, float r, float g, float b);
private
new_file;
i;
begin
new_file=fpg_new();
from i=1 to 999;
if(map_exists(file,i))
fpg_add(new_file,i,file,i);
rgbscale(new_file,i,r,g,b);
end
end
return new_file;
end
Creo que tendrás que poner la función antes que la llamada a la función para que te funcionen bien los floats :)
Finalmente lo hice funcionar. No funciona con imágenes de 32 bits de profundidad. Lo pase a 16 y funcionó ok!