Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: eams1986 en Junio 07, 2015, 04:07:56 AM

Título: Sprite redondo.
Publicado por: eams1986 en Junio 07, 2015, 04:07:56 AM
Este codigo lo escribio CLAMUD esta funcionando bien pero con sprite cuadrados me gustaria acomodarlos con sprites redondos. Alguien me pudiera decir como hacer en ese caso ya que no logro dar con la solucion ya que cuando doy click fuera del circulo como es redondo no queda bien .

coordenadas son:
x1 = x;
y1 = y;
x2 = x+sprite_width;
y2 = y+sprite_height;
Define las coordenadas en el evento Create. Luego, en cada step, checas si se ha pulsado con alguno de los cinco ratones (numerados de 0 a 4), entonces reproduces un sonido:
for( i=0; i<=4; i++ )
{
    if( device_mouse_check_button_pressed( i, mb_left ) )
    if( device_mouse_x(i) > x1 and devide_mouse_x(i) < x2 )
    if( device_mouse_y(i) > y1 and device_mouse_y(i) < y2 )
        audio_play_sound( nota, 0, false );
}

Gracias de antemano.

Edito:la mascara del sprite esta en elipse por si hace falta pero sigue igual.
Título: Re:Sprite redondo.
Publicado por: Silver_light en Junio 07, 2015, 05:37:21 AM
Si es un objeto redondo entonces deberías calcular la distancia entre el centro del sprite y el radio de la circunferencia del sprite.

Por ejemplo, verificas las distancia DIST entre el centro del sprite y el cursor.
[GML]
if (point_distance(x,y,mouse_x, mouse_y) <= DIST){
// acciones }
[/GML]
Título: Re:Sprite redondo.
Publicado por: eams1986 en Junio 08, 2015, 04:32:19 PM
si le pongo eso no me respondes los dos o tres botones a la ves .

no se que estoy haciendo mal

solo se escucha un sonido si presiono los 3 de una ves .
:'( :'( :'(
Título: Re:Sprite redondo.
Publicado por: Clamud en Junio 08, 2015, 04:35:59 PM
Muestra el código.
Título: Re:Sprite redondo.
Publicado por: eams1986 en Junio 08, 2015, 06:05:55 PM
//CREATE
//x1 = x;
//y1 = y;
//x2 = x//+sprite_width;
//y2 = y//+sprite_height;

device_mouse_dbclick_enable( false );

image_speed=0


//STEP
for( i=0; i<=4; i++ )
if( device_mouse_check_button_pressed( i, mb_left ) )
 
       
if (point_distance(x,y,mouse_x, mouse_y) <= 192)
{
audio_play_sound( snd_floor, 0, false );
}
Título: Re:Sprite redondo.
Publicado por: Clamud en Junio 08, 2015, 11:27:34 PM
No debes usar mouse_x ni mouse_y porque devuelven la posición sólo del primer "device". Y tampoco tiene sentido usar las variables x1 y y1 si el sprite tiene el origen centrado. El código podría quedar así:
[gml]
///CREATE
device_mouse_dbclick_enable( false );
r = 192; //radio del botón
//o así: r = sprite_width/2;
[/gml]
[gml]
//STEP
for( i=0; i<=4; i++ )
{
    if( device_mouse_check_button_pressed( i, mb_left ) )       
    if( point_distance( x,y, device_mouse_x(i), device_mouse_y(i) ) <= r )
        audio_play_sound( snd_floor, 0, false );
}
[/gml]