hola makeros, tengo un problema bien raro, es acerca del reemplazo de colores en un sprite, no se mucho acerca de este codigo, pero no puedo realizar cambios de colores en un intervalo de tiempo peque?o, ya que se queda detenido el juego y no resulta as? :(. Todo esto sucedi? porque el personaje principal se recarga para disparar, y al estar mas recargado parpadea m?s, y no me resulta...
el codigo lo encontr? en gmlscripts.com:
/*
** Usage:
** sprite_replace_color(sprite,oldcolor,newcolor)
**
** Arguments:
** sprite sprite to change
** oldcolor color that will be replaced
** newcolor color used as replacement
**
** Returns:
** (-1) on error
**
** Notes:
** This script replaces one color in a sprite with another.
** No new sprites are created, the given sprite is changed.
**
** GMLscripts.com
*/
{
var sprite, oldc, newc;
sprite = argument0;
oldc = argument1;
newc = argument2;
var w, h, n, i, xo, yo, surf, tempsprite, newsprite, alphasprite;
w = sprite_get_width(sprite);
h = sprite_get_height(sprite);
n = sprite_get_number(sprite);
xo = sprite_get_xoffset(sprite);
yo = sprite_get_yoffset(sprite);
surf = surface_create(w,h+1);
surface_set_target(surf);
for(i=0; i<n; i+=1) {
draw_clear_alpha(c_black,1);
draw_set_blend_mode_ext(bm_inv_dest_color,bm_one);
draw_sprite(sprite,i,xo,yo);
draw_set_blend_mode(bm_normal);
draw_point_color(0,h,oldc);
tempsprite = sprite_create_from_surface(surf,0,0,w,h+1,true,false,xo,yo);
draw_clear_alpha(newc,1);
draw_sprite(tempsprite,0,xo,yo);
sprite_delete(tempsprite);
if (i == 0) {
newsprite = sprite_create_from_surface(surf,0,0,w,h,false,false,xo,yo);
if (newsprite < 0) return -1;
}else{
sprite_add_from_surface(newsprite,surf,0,0,w,h,false,false);
}
draw_clear_alpha(c_white,1);
draw_set_blend_mode_ext(bm_zero,bm_src_alpha);
draw_sprite(sprite,i,xo,yo);
if (i == 0) {
alphasprite = sprite_create_from_surface(surf,0,0,w,h,false,false,xo,yo);
if (alphasprite < 0) {
sprite_delete(newsprite);
return -1;
}
}else{
sprite_add_from_surface(alphasprite,surf,0,0,w,h,false,false);
}
draw_set_blend_mode(bm_normal);
}
surface_reset_target();
sprite_assign(sprite,newsprite);
sprite_set_alpha_from_sprite(sprite,alphasprite);
sprite_delete(newsprite);
sprite_delete(alphasprite);
surface_free(surf);
}
solo lo puedo usar al inicio del juego, solo para poder cambiar una sola vez, los colores del personaje, he visto en internet algunos videos en donde pueden hacer que cambie muchas veces el color sin detenerse el juego, pero no se como.
La verdad no le? el script, pero alcance a ver que usaba superficies y un for, por lo que debe de ser muy lento y al usarlo cada step se va a alentar o trabar tu juego, gm ya tiene una funci?n incorporada para hacer cambiar de color el sprite de un objeto, es "image_blend", de dejo algunos ejemplos de como usarla.
[gml]
// ejemplo con constantes.
image_blend=c_blue
//ejemplo para hacer tu color con valores de rojo, verde y azul.
image_blend=make_color_rgb(128,156,96)
//ejemplo para hacer tu color con valores de matiz saturaci?n y brillo
image_blend=make_color_hsv=(254,142,4)
//ejemplo con n?meros hexadecimales.
image_blend=$FF76C7
[/gml]