hola makeros! hoy se me ha pasado un problema que me ha hecho quedarme de manos cruzadas jaja.. bueno, yo se que alguno de ustedes sabra:
El problema surge a traves del manejo de surfaces, lo que quiero es cortar una imagen particular de la siguiente manera
(http://www.comunidadgm.org/preguntas-y-respuestas/problema-con-surfaces-cortar-imagen/?action=dlattach;attach=14263;image)
Lo que tengo hasta ahora es hasta la imagen 3, pero no se como llegar a la 4
// vemos si la superficie existe, si no la volvemos a crear
if (!surface_exists(surface)) surface = surface_create(radio*2,radio*2);
// iniciamos la edicion del surface
surface_set_target(surface)
draw_clear_alpha(0,0);
draw_circle_colour(radio,radio,radio,c_white,c_white,0);
draw_set_blend_mode_ext(bm_dest_color,bm_zero);
draw_sprite(sprite, 0, 0, 0)
draw_set_blend_mode(bm_normal);
surface_reset_target()
Otra cosa, la imagen 3 no se ve asi, se ve de esta manera:
(http://www.comunidadgm.org/index.php?action=dlattach;topic=23725.0;attach=14265;image)
de antemano muchas gracias, cualquier ayuda les agradecere mucho :)
si alguien me explica mejor acerca de los surfaces y los canales alpha seria mejor, o una pagina en donde se entienda realmente como funciona :P
Si ya tienes la tercera imagen, lo que falta es mostrar esa surface, pero "quitándole" lo blanco. Hasta donde entiendo, para hacerlo tienes dos opciones.
1) La fácil: usar un modo blending adecuado en el evento DRAW, para dibujar la surface sin que se vea lo blanco.
2) La difícil: usar un shader para detectar un rango/tonalidad en específico y remover esos pixeles (borrar los pixeles blancos).
Aquí se explican los blending mode
https://www.yoyogames.com/tech_blog/68 (https://www.yoyogames.com/tech_blog/68)
https://www.yoyogames.com/tech_blog/69 (https://www.yoyogames.com/tech_blog/69)
Este ejemplo te puede resultar útil
http://gmc.yoyogames.com/index.php?showtopic=512187 (http://gmc.yoyogames.com/index.php?showtopic=512187)
Tengo la sensación de que esto es un bug o depende de la versión de :GMS:. Yo tengo la versión 1.3 y usé exactamente el mismo código, el resultado es diferente, la parte blanca aparece en los bordes de la máscara de colisión del sprite rojo, y no en medio como en tu caso, al modificar la máscara de colisión el resultado no cambia.
La solución que encontré es dibujar los elementos en el orden inverso; primero el sprite rojo y luego la máscara de recorte, y en vez de usar "draw_circle_color" usé un sprite con forma circular, si no tampoco funciona.
Hice otras pruebas y si quieres usar texturas o máscaras con "anti-alias" (suavizadas) es mejor usar draw_set_blend_mode_ext( bm_one, bm_zero );, en vez de draw_clear_alpha(0,0);. Las pruebas están en el ejemplo adjunto.
En :GM8: el código funciona sin problemas.