Buen día muchachos.

Me preguntaba si existe alguna función o dll externa que facilite la acción de modificar ciertos colores de un sprite, digamos para un juego de peleas en donde se quiere que si dos jugadores eligen el mismo personaje, uno de ellos tenga ligeros cambios de color.

Muchas gracias por su atención, saludos!
赤屍蔵人


?

No creo que sea muy necesario una dll, GM tiene opciones de dibujo para modificar ese tipo de colores en el dibujo.

www.comunidadgm.org/manual_GM/Imagenes_y_sprites.htm

o usar el parametro color al dibujar el sprite.

draw_sprite_ext(sprite,subimg,x,y,xscale,yscale,rot,color,alpha)

Gracias ThreeBox, sin embargo el argumento 'color' se manipula bajo la variable image_blend, que lo que hace es colorear el sprite uniformemente y yo sólo quiero que cambien de color ciertos pixeles de determinados colores :P
赤屍蔵人


?

Pff entonces no esta tan simple  :'( .
Recuerdo alguna dll que sirve para hacer efectos a imágenes, pero creo que solo funciona con backgrounds. la buscaré.
Y pues hay funciones de gm que te permiten tomal el pixel en una posición y modificar sus colores, pero creo que es muy lenta.
Creo que deberías buscar alternativas como separar el sprite, o utilizar surfaces o no se...

#4 Diciembre 22, 2012, 12:13:14 AM Ultima modificación: Diciembre 22, 2012, 12:15:33 AM por penumbra
Buscando en Yoyo encontré esto. Según explica el autor, el script cambia TODOS los pixeles de un color a otro, y al final regresa un nuevo sprite. No lo he probado, pero seguro te sirve al menos de ejemplo base


// sprite_change_pixels(sprite,oldcolor,newcolor);
var width, height, xoff, yoff, surf, new, i, j;

width = sprite_get_width(argument0);
height = sprite_get_height(argument0);
xoff = sprite_get_xoffset(argument0);
yoff = sprite_get_yoffset(argument0)
surf = surface_create(w,h);

surface_set_target(surf);
draw_clear(c_white);
draw_sprite(argument0,0,xoff,yoff)
for(i=0;i<width;i+=1) {
    for(j=0;j<height;j+=1) {
        if (surface_getpixel(surf,i,j) == argument1) {
            draw_point_color(i,j,argument2);
        }
    }
}
surface_reset_target();
new = sprite_create_from_surface(surf, 0, 0, width, height, 0, 0, xoff, yoff);
surface_free(surf);
return new;


EDITO: Ah, el autor comenta que el script es lento, por lo que no debes llamarlo en STEP, o debes asegurarte que se ejecute sólamente en ciertas circusntancias.


Muchísimas gracias, penumbra.

En efecto. más o menos eso es lo que busco. Nunca he trabajado con 'surfaces', investigaré más al recpecto.

El código hace su trabajo, tendré que llamarlo varias veces entonces si quiero que cambie varios pixeles de diferentes tonos. El mayor problema está en que no acepta transparencias, no sé si sea asunto del código en particular o esas funciones no las manejan.

Saludos!
赤屍蔵人


?