Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: seed86 en Noviembre 17, 2013, 03:12:29 AM

Título: Invertir imagen (negativo) al recibir daño o cambio de color.
Publicado por: seed86 en Noviembre 17, 2013, 03:12:29 AM
Hola a todos.

Me gustaría saber cómo se pueden invertir los cólores de un sprite cuando este recibe daño (como una imágen en negativo) haciendo además en efecto de parpadeo. Aqui os dejo una imagen:

(http://imageshack.com/a/img4/2635/ctzo.png)

La imagen es del juego AVGN adventures dónde se usa este efecto y es muy vistoso. Si no si alguien sabe como hacer que el enemigo tome un tono más rojizo tambien me serviría.

Yo ya sé hacer un efecto de parpadeo cambiando el alpha del objeto pero desconozco cómo se hace el efecto de negativo o de coloreado del sprite.

Muchas gracias
Título: Re:Invertir imagen (negativo) al recibir daño o cambio de color.
Publicado por: Daz en Noviembre 17, 2013, 11:30:28 AM
Puedes usar el siguiente script de GMLScripts.com:

[gml]
/*
**  Usage:
**      draw_rectangle_inverted(x1,y1,x2,y2)
**
**  Arguments:
**      x1,y1       1st corner of the rectangle
**      x2,y2       2nd corner of the rectangle
**
**  Returns:
**      nothing, inverts the given rectangular area of the screen
**
**  Notes:
**      Resets blending mode to normal.
**
**  GMLscripts.com
*/
{
    draw_set_blend_mode_ext(bm_inv_dest_color,bm_inv_src_color);
    draw_rectangle_color(argument0,argument1,argument2,argument3,c_white,c_white,c_white,c_white,0);
    draw_set_blend_mode(bm_normal);
}
[/gml]

Con este script puedes invertir una porción de la vista en la que te encuentres. Para invertir solo un sprite, y no toda una pantalla, puedes hacer lo siguiente:

1. Invertir una porción de pantalla lo suficientemente grande para que contenga el sprite a invertir.
2. Dibuja encima el sprite del enemigo normal, sin ningún efecto.
3. Vuelve a invertir la misma porción de pantalla.

Así, tendrás tu sprite con los colores invertidos.
Título: Re:Invertir imagen (negativo) al recibir daño o cambio de color.
Publicado por: seed86 en Noviembre 17, 2013, 02:45:36 PM
Muchas gracias por tu ayuda, pero no lo veo claro, si cambia todo un rectángulo que contenga el sprite no se verían las esquinas del mismo (fuera del sprite) también en negativo?
Otro problema que tengo es que nunca he usado scripts...  :-[ Tendré que buscar algún tutorial sobre como ejecutarlos.
Título: Re:Invertir imagen (negativo) al recibir daño o cambio de color.
Publicado por: Daz en Diciembre 21, 2013, 04:29:29 PM
Hola seed86, con los tres pasos que escribí sólo se vería invertido el sprite que dibujaste. El truco está en que inviertes todo lo demás, menos el sprite del enemigo, y luego vuelves a invertir todo y entonces sólo quedará el sprite del enemigo invertido. Cuando inviertes una imagen ya invertida, esta vuelve a su situación "normal".

Los scripts son muy sencillos de usar, créeme. Échale un vistazo al manual: http://www.comunidadgm.org/manual_GM/Scripts_GML.htm No debería darte demasiados dolores de cabeza. Es simplemente copiar ese código en un script que crees nuevo, lo llamas como quieras, y ese nombre lo usas para llamar al script. Si lo llamas "draw_rectangle_inverted", lo usas en un código como "draw_rectangle_inverted(x1,y1,x2,y2)".