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.
El ayer es un recuerdo, el mañana un pensamiento, es el ahora en donde existo y vivo para ser feliz :D

#1 Agosto 14, 2011, 04:29:31 AM Ultima modificación: Agosto 14, 2011, 04:31:06 AM por brunoxzx
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]