Noticias

¡Ayuda a la Comunidad GM, haz una donación!

Comunidad Game Maker

Bienvenid@ a la comunidad hispana de Game Maker. Nuestro objetivo es crear videojuegos y dar soporte en castellano de GM. Para mejorar nuestro servicio hemos implantado, como adicion al reglamento general, algunas normas especificas en los subforos más comunes. ¡No olvides informarte antes de participar!.

Autor Tema: Modificar "paleta" de colores  (Leído 1421 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado SilentGhost

  • Habitual
  • *
  • Puntos: 32
  • Mensajes: 93
  • Sexo: Masculino
  • Take my hand, come back to the land...
    • Ver Perfil
    • Alan Marth Media
en: Diciembre 21, 2012, 08:23:06 pm
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 Tienes Permisos Para Dar Puntos
point 0 Puntos

Este tema no recibió puntos.


Desconectado ThreeBox

  • Habitual
  • *
  • Puntos: 14
  • Mensajes: 12
  • Sexo: Masculino
    • Ver Perfil
Respuesta #1 en: Diciembre 21, 2012, 09:19:05 pm
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)

 


Desconectado SilentGhost

  • Habitual
  • *
  • Puntos: 32
  • Mensajes: 93
  • Sexo: Masculino
  • Take my hand, come back to the land...
    • Ver Perfil
    • Alan Marth Media
Respuesta #2 en: Diciembre 21, 2012, 10:26:28 pm
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

赤屍蔵人


?
 


Desconectado ThreeBox

  • Habitual
  • *
  • Puntos: 14
  • Mensajes: 12
  • Sexo: Masculino
    • Ver Perfil
Respuesta #3 en: Diciembre 21, 2012, 11:21:06 pm
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...

 


Desconectado penumbra

Respuesta #4 en: Diciembre 22, 2012, 12:13:14 am
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

Código: [Seleccionar]
// 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.

« última modificación: Diciembre 22, 2012, 12:15:33 am por penumbra »

 


Desconectado SilentGhost

  • Habitual
  • *
  • Puntos: 32
  • Mensajes: 93
  • Sexo: Masculino
  • Take my hand, come back to the land...
    • Ver Perfil
    • Alan Marth Media
Respuesta #5 en: Diciembre 24, 2012, 12:27:58 am
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!

赤屍蔵人


?