buenas, estoy dibujando unos triangulos y rectangulos en el draw de un objecto, para dar un efecto de sombra.
Pero al utilizar draw_set_alpha se baja todo el alpha del juego.
Como puedo bajar solo el alpha de los triangulos y rectangulos dibujados solo en el draw de este objecto???
os paso el codigo;
draw_set_colour(c_black);
//if place_meeting(x,y,objectPLAYER)
//{
draw_triangle(x,y,x+lengthdir_x(1000,point_lt),y+lengthdir_y(1000,point_lt),x+30+lengthdir_x(1000,point_rt),y+lengthdir_y(1000,point_rt),0)
draw_triangle(x,y,x+30+lengthdir_x(1000,point_rt),y+lengthdir_y(1000,point_rt),x+30,y,0)
draw_triangle(x,y+30,x+lengthdir_x(1000,point_ld),y+30+lengthdir_y(1000,point_ld),x+30+lengthdir_x(1000,point_rd),y+30+lengthdir_y(1000,point_rd),0)
draw_triangle(x,y+30,x+30,y+30,x+30+lengthdir_x(1000,point_rd),y+30+lengthdir_y(1000,point_rd),0)
draw_triangle(x,y+30,x,y,x+lengthdir_x(1000,point_lt),y+lengthdir_y(1000,point_lt),0)
draw_triangle(x,y+30,x+lengthdir_x(1000,point_ld),y+30+lengthdir_y(1000,point_ld),x+lengthdir_x(1000,point_lt),y+lengthdir_y(1000,point_lt),0)
draw_triangle(x+30,y+30,x+30,y,x+30+lengthdir_x(1000,point_rd),y+30+lengthdir_y(1000,point_rd),0)
draw_triangle(x+30,y,x+30+lengthdir_x(1000,point_rt),y+lengthdir_y(1000,point_rt),x+30+lengthdir_x(1000,point_rd),y+30+lengthdir_y(1000,point_rd),0)
draw_rectangle(x,y,x+30,y+30,1);
//}
Es bastante basico, pero ahora no recuerdo como se hacia, pufff, estoy fatal. ???
Por ejemplo:
[gml]
draw_set_alpha(0.5);
draw_rectangle(x1,y1,x2,y2,false);
draw_set_alpha(0.7);
draw_rectangle(x1,y1,x2,y2,true);
draw_set_alpha(1);
[/gml]
En un evento Draw la primera linea de código se ejecuta primero, en este caso el alpha se pondrá en 0.5
Luego lee la siguiente línea que nos dibuja un rectángulo con relleno (false) y su alpha será igual a 0.5
Después pongo el alpha en 0.7
La siguiente línea dibujará el contorno del rectángulo (true) con un alpha igual a 0.7
Por último pongo el alpha en 1
En tu código finaliza con:
[gml]
draw_set_alpha(1);
[/gml]
claro, al finalizar con alpha 1, hace que a todos los demas no les afecte. Esa es la idea, noo??
Cita de: Zapdos43 en Agosto 23, 2017, 08:59:22 PM
Por ejemplo:
[gml]
draw_set_alpha(0.5);
draw_rectangle(x1,y1,x2,y2,false);
draw_set_alpha(0.7);
draw_rectangle(x1,y1,x2,y2,true);
draw_set_alpha(1);
[/gml]
En un evento Draw la primera linea de código se ejecuta primero, en este caso el alpha se pondrá en 0.5
Luego lee la siguiente línea que nos dibuja un rectángulo con relleno (false) y su alpha será igual a 0.5
Después pongo el alpha en 0.7
La siguiente línea dibujará el contorno del rectángulo (true) con un alpha igual a 0.7
Por último pongo el alpha en 1
En tu código finaliza con:
[gml]
draw_set_alpha(1);
[/gml]
Y para rizar el rizo.
Como seria para aplicarlo a un surfaces??
Un surfaces es practicamente un rectangulo que ocupa toda la pantalla, en este caso de color negro, para recrear la oscuridad.
Pero si quiero ajustar el alpha de la surfaces, como seria??
execute code:
//create the surface for the lights to be drawn onto
globalvar light;
light = surface_create(view_wview,view_hview);
global.LINTERNA = 1;
Step Event:
execute code:
//get ready to draw on the lighting surface
surface_set_target(light);
//fill in the lighting dark again
draw_set_color(c_white); //choose different colors here to change the darkness eg: c_white, c_gray
draw_rectangle(0,0,view_wview,view_hview,false);
//put drawing back to normal
surface_reset_target();
Draw Event:
execute code:
draw_set_blend_mode(bm_subtract);
draw_surface(light,view_xview,view_yview);
//draw_surface_ext(light, view_xview, view_yview, 1, 1, 0, c_white, 0.15);
draw_set_blend_mode(bm_normal);
En la función draw_surface_ext() el último valor que debes ingresar es el alpha.
Pero si quieres ajustar el alpha usando draw_set_alpha() entonces sería:
Draw Event:
[gml]draw_set_alpha(valor entre 0 y 1);
draw_set_blend_mode(bm_subtract);
draw_surface(light,view_xview,view_yview);
draw_set_blend_mode(bm_normal);
// alpha = 1
draw_set_alpha(1);
[/gml]
Muchas gracias, voy a probarlo a ver si consigo lo que busco.
Gracias. ;D
Cita de: Zapdos43 en Agosto 23, 2017, 10:20:04 PM
En la función draw_surface_ext() el último valor que debes ingresar es el alpha.
Pero si quieres ajustar el alpha usando draw_set_alpha() entonces sería:
Draw Event:
[gml]draw_set_alpha(valor entre 0 y 1);
draw_set_blend_mode(bm_subtract);
draw_surface(light,view_xview,view_yview);
draw_set_blend_mode(bm_normal);
// alpha = 1
draw_set_alpha(1);
[/gml]