Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: Naitsabes0 en Septiembre 01, 2017, 03:30:16 PM

Título: Todavía no logro invertir el color de la habitación
Publicado por: Naitsabes0 en Septiembre 01, 2017, 03:30:16 PM
En un inicio la solución es mas fácil, y muchos me dirán que simplemente le de a invertir en la opción de colores del sprite, pero busco algo mas complejo de hacer, y es que quiero crear un objeto que todo lo que este en una habitación (room), invierta sus colores, la razón de esto es que quiero que el cuarto tenga una apariencia única que no se va a encontrar en ningún otro lado, digamos que es una zona secreta opcional que el jugador puede visitar por curiosidad.
(https://i.gyazo.com/d0ac8cff63c568b178ab691ee74a2c3a.gif)
Un ejemplo de como se vería una imagen en todo el juego (izquierda), y otra en como se vera en esa habitación secreta (derecha).

Gracias por leer.
Título: Re:¿Como Invertir los colores?
Publicado por: Clamud en Septiembre 01, 2017, 03:52:58 PM
Puedes usar un script: http://www.gmlscripts.com/script/draw_rectangle_inverted
O un shader: http://xorshaders.weebly.com/tutorials/color-shaders-3
Título: Re:¿Como Invertir los colores?
Publicado por: Naitsabes0 en Septiembre 01, 2017, 08:16:00 PM
Cita de: Clamud en Septiembre 01, 2017, 03:52:58 PM
Puedes usar un script: http://www.gmlscripts.com/script/draw_rectangle_inverted
O un shader: http://xorshaders.weebly.com/tutorials/color-shaders-3
EL scrip
No funciona, me da error.
{
    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);
    return 0;
}

El shaders es algo que nunca he visto, pero al seguir los pasos de la pagina http://xorshaders.weebly.com/tutorials/color-shaders-3 , tampoco funciona en  :GMS:.

¿Seguro que no hay un método tan simple, como programar un objeto que invierta todo lo que esta en la habitación o la vista? estos códigos que mezclan scripts y shaders parecen poco prácticos para un fin tan simple como invertir colores.
Título: Re:¿Como Invertir los colores?
Publicado por: 3dgeminis en Septiembre 01, 2017, 11:53:16 PM
A mi me funciona el script, el problema es que se dibuja tambien el rectangulo. Me puse a buscar y encontre la solucion:
[gml]
draw_set_blend_mode_ext(bm_inv_dest_colour, bm_zero);
draw_rectangle_colour(x, y, x+sprite_width, y+sprite_height, c_white,c_white,c_white,c_white,false);
draw_set_blend_mode(bm_normal);
draw_self();
draw_set_blend_mode_ext(bm_inv_dest_colour, bm_zero);
draw_rectangle_colour(x, y, x+sprite_width, y+sprite_height, c_white,c_white,c_white,c_white,false);
draw_set_blend_mode(bm_normal);
[/gml]
(https://i.imgur.com/Fs0R1E8.png)
Título: Re:¿Como Invertir los colores?
Publicado por: Naitsabes0 en Septiembre 02, 2017, 04:36:57 AM
Cita de: 3dgeminis en Septiembre 01, 2017, 11:53:16 PM
A mi me funciona el script, el problema es que se dibuja tambien el rectangulo. Me puse a buscar y encontre la solucion:
[gml]
draw_set_blend_mode_ext(bm_inv_dest_colour, bm_zero);
draw_rectangle_colour(x, y, x+sprite_width, y+sprite_height, c_white,c_white,c_white,c_white,false);
draw_set_blend_mode(bm_normal);
draw_self();
draw_set_blend_mode_ext(bm_inv_dest_colour, bm_zero);
draw_rectangle_colour(x, y, x+sprite_width, y+sprite_height, c_white,c_white,c_white,c_white,false);
draw_set_blend_mode(bm_normal);
[/gml]
(https://i.imgur.com/Fs0R1E8.png)
Se agradece el apoyo, pero solo invirtió el sprite de un objeto, para ser mas preciso el sprite que contiene el objeto, como ya mencione busco que el objeto invierta el color de todos los objetos que están en la habitación o la vista del jugador, este código no sirve para dicha acción, incluso se puede lograr lo mismo sin escribir nada de código, dándole a la opción de invertir cuando el jugador esta creando un sprite.

Detalle a considerar.

He escrito este código en un evento "draw" a un objeto que debe ser invisible (sin sprite), ya que es un controlador, pero sale error si este no tiene sprite, ademas este código no invierte nada a pesar de que esta presente, ni en la habitación, vista o colisión contra el.

(https://i.gyazo.com/95bafee62edfdc7523e4dd965ee3b4ef.gif)
NOTA: El cuadrado rojo es el sprite que estuve obligado a colocar para que me dejara abrir el juego, pero es de color celeste (producto del código), y no hace absolutamente nada al entorno.
Título: Re:¿Como Invertir los colores?
Publicado por: Johann en Septiembre 02, 2017, 05:18:54 PM
prueba poniendo ese código dentro de un bloque de este estilo en un objeto controlador

[gml]
with (all) {
    //codigo de 3dgeminis
}
[/gml]
Título: Re:¿Como Invertir los colores?
Publicado por: Clamud en Septiembre 02, 2017, 06:01:48 PM
A mi me funciona, como se ve en las imágenes adjuntas.
Para que afecte a toda la ventana, debes poner como argumentos del script los límites de la view o de la room, y el script se debe ejecutar después de que los objetos se han dibujado (el objeto controlador debe tener menor depth que los demás o usar el evento Draw End). Si quieres que el personaje no resulte afectado debes dibujarlo después de ejecutar el script.
Título: Re:¿Como Invertir los colores?
Publicado por: Naitsabes0 en Septiembre 02, 2017, 11:10:37 PM
Cita de: Johann en Septiembre 02, 2017, 05:18:54 PM
prueba poniendo ese código dentro de un bloque de este estilo en un objeto controlador

[gml]
with (all) {
    //codigo de 3dgeminis
}
[/gml]
obj_Invertir_Colores
evento "DRAW"
///Invertir colores
with (all)
{
draw_set_blend_mode_ext(bm_inv_dest_colour, bm_zero);
draw_rectangle_colour(x, y, x+sprite_width, y+sprite_height, c_white,c_white,c_white,c_white,false);
draw_set_blend_mode(bm_normal);
draw_self();
draw_set_blend_mode_ext(bm_inv_dest_colour, bm_zero);
draw_rectangle_colour(x, y, x+sprite_width, y+sprite_height, c_white,c_white,c_white,c_white,false);
draw_set_blend_mode(bm_normal);
}

Resultado final.

ERROR in
action number 1
of Draw Event
for object obj_Invertir_Colores:

Trying to draw non-existing sprite.
at gml_Object_obj_Invertir_Colores_DrawEvent_1 (line 7) - draw_self();

Esta malo, probablemente porque no tengo ningún scrip en este experimento.
Título: Re:¿Como Invertir los colores?
Publicado por: Naitsabes0 en Septiembre 02, 2017, 11:14:01 PM
Cita de: Clamud en Septiembre 02, 2017, 06:01:48 PM
A mi me funciona, como se ve en las imágenes adjuntas.
Para que afecte a toda la ventana, debes poner como argumentos del script los límites de la view o de la room, y el script se debe ejecutar después de que los objetos se han dibujado (el objeto controlador debe tener menor depth que los demás o usar el evento Draw End). Si quieres que el personaje no resulte afectado debes dibujarlo después de ejecutar el script.
obj_Invertir_Colores
evento "DRAW"
///Invertir colores
with (all)
{
draw_set_blend_mode_ext(bm_inv_dest_colour, bm_zero);
draw_rectangle_colour(x, y, x+sprite_width, y+sprite_height, c_white,c_white,c_white,c_white,false);
draw_set_blend_mode(bm_normal);
draw_self();
draw_set_blend_mode_ext(bm_inv_dest_colour, bm_zero);
draw_rectangle_colour(x, y, x+sprite_width, y+sprite_height, c_white,c_white,c_white,c_white,false);
draw_set_blend_mode(bm_normal);
}

Resultado final.

ERROR in
action number 1
of Draw Event
for object obj_Invertir_Colores:

Trying to draw non-existing sprite.
at gml_Object_obj_Invertir_Colores_DrawEvent_1 (line 7) - draw_self();

Esta malo, probablemente porque no tengo ningún scrip en este experimento, tampoco sabría como conectarlo con el obj_Invertir_Colores si lo creara  :-\.