¡Buenas! Pues veréis, imaginad que yo dibujo una primitiva cuya textura es un círculo. Entonces, luego yo dibujo una segunda primitiva con una forma de estrella desde el centro. Pues básicamente, quiero que sólo dibuje la estrella en aquellos píxeles que se superpongan con el círculo. Es decir, las puntas de la estrella, en caso de quedar fuera del círculo, no se dibujan.
Dudo si se puede con: https://docs.yoyogames.com/source/dadiospice/002_reference/drawing/colour%20and%20blending/draw_set_blend_mode_ext.html, pero no veo en la imagen nada que lo indique...
Hago Up! al tema. Lo cerré porque, debido a un cambio de gameplay, no lo necesitaba. Ahora he revertido el cambio y vuelvo a necesitar esto... Gracias >_<
Si dibujas el circulo sobre una surface, cuando dibujes la estrella debería suceder exactamente lo que quieres.
Para recortar la estrella puedes usar surfaces y bm_subtract, primero dibujas la parte que no quieres que se borre, luego el sprite que quieres recortar:
[gml]
sup = surface_create(64,64)
surface_set_target(sup)
draw_sprite(spr_redondela, 0, 0,0) //dibujas el circulo
draw_set_blend_mode_ext(bm_dest_alpha, bm_subtract)
draw_sprite(spr_estrella, 0, 0,0) //dibujas la estrella
draw_set_blend_mode(bm_normal);
surface_reset_target();
[/gml]
Este codigo te daría la estrella sin puntas, recortada donde cabe el circulo.
Luego deberías, si quieres, usar otra surface para juntar el circulo y la estrella sin puntas para obtener una sola imagen:
[gml]
sup2 = surface_create(64,64)
surface_set_target(sup2)
draw_sprite(spr_redondela, 0, 0,0) //dibujas el circulo debajo
draw_surface(sup, 0,0) //dibujas la estrella sin puntas
surface_reset_target();
[/gml]
Eso te daría la imagen final en una surface.
No te olvides de eliminarlas para que no ocupen memoria! :)
¡Muchas gracias! Me ha funcionado perfectamente ^^
Como nota extra: yo luego saqué surface_get_texture para dibujarlo en una primitiva 3D y tuve varios problemas.
- Hay que hacer surface_free DESPUÉS de haber dibujado la textura, o de lo contrario ésta se pierde y crashea a la hora de dibujarla. Al parecer la textura es un puntero a la surface y ésta debe permanecer existiendo cuando uses la textura.
- Debes crear surfaces, set_target, dibujar, hacerles reset_target y surface_get_texture dentro de un evento draw_GUI si estás usando 3D, y luego usarla fuera, o todo falla y deja de dibujar. Las surfaces no funcionan en el evento draw normal.