Hola, estoy en un proyecto (Naaaahh...¿En serio?) y tenggo un problemisha:
En el juego, hay un editor de niveles, donde se pueden crear muros y cosas así haciendo click con el Mouse, pero también tengo unos botones creados con Draw GUI y VirtualKeys. El problema es que al clickear esos botones, también me crea objetos debajo de los botones. Quisiera saber cómo puedo "desactivar" las funciones/eventos del mouse al clickear esos botones, o sea que ejecute la acción de los botones pero no permita crear objetos debajo de éstos.
alaberga regué el café.

BA:STFW&RTFM

en el caso de tener device_check_button, cámbialo por el pressed para que no se mantenga en bucle... puede ser eso?

yo uso este SCRIPT, llamado en mi caso "device_check_pressed"
[gml]for( i=0; i<=4; i++ )
{
    if device_mouse_check_button_pressed(i,mb_left)
    if point_in_rectangle(
    device_mouse_x(i), device_mouse_y(i),
    bbox_left, bbox_top, bbox_right, bbox_bottom )
        return true;
}
return false;
[/gml]

Y lo llamo así:
[gml]if device_check_pressed()
{
     //codigo
}[/gml]
[spoiler="ola k ase clickarme o k ase"]la imagen no se quita xD
[/spoiler]

Las funciones de mouse que tengo son mouse normales. mouse_check_button(), pero no puedo poner _pressed, ya que así es el editor, así va bien. Pero gracias al problemisha de los botones, sigue creando objetos sin que el usuario sepa.
alaberga regué el café.

BA:STFW&RTFM

pero usas mouse_ o device_ ???
[spoiler="ola k ase clickarme o k ase"]la imagen no se quita xD
[/spoiler]

dihe normales, NORMALES... :-[ :-X XD
[gml]
if mouse_check_button(mb_left)
//Créame un objeto muro...xD
[/gml]
alaberga regué el café.

BA:STFW&RTFM

entonces pk dices nada de virtualkeys en el titulo???

pues repito... usa mouse_check_pressed!!  button es como mantener el click no deja de checkear sin parar, el pressed checka una sola vez justo en el momento de clickar

PD: en juegos android, por lo personal, pienso que queda mejor poner las acciones en el released y aprovechar el pressed y tal para otras cosas, ocmo animacion al pulsar un botón, en tu caso, para previsualizar el objeto en el mouse antes de colocarlo, tal y como lo tengo hecho en mi supremo proyecto, etc..
[spoiler="ola k ase clickarme o k ase"]la imagen no se quita xD
[/spoiler]

Bueno...
Lo de virtualKeys en el título es precisamente por eso. Uso eventos Mouse comunes, pero quiero que éstos no funcionen si se hace click en una VirtualKey, esto para evitar que se creen objetos debajo de donde está la virtualKey, ya que sería fastidioso.
Ahora, no uso mouse_check_buttton_pressed porque ya lo dije antes: Es un editor de niveles, y los jugadores se llevarían siglos poniendo muro por muro, y por eso, prefiero dejar sólo mouse_check_button, para que puedan crear varos y rápidamente.
alaberga regué el café.

BA:STFW&RTFM

a ver si he entendido... tienes ya unas virualkey puestas y tienes oootra cosa con mouse button puesta y no quieres que se ponga en la zona donde tienes puestas las virtualkeys... si es eso lo que dices solamente, donde tienes el mouse button aplícale un filtro de mouse_x/y

if mouse_x < (coordenada x de la virtualkey xD)
and mouse y<  (coordenada x de la virtualkey xD)
ande mouse_x > bla bla bla....
{
//codigo
}


me explico?
[spoiler="ola k ase clickarme o k ase"]la imagen no se quita xD
[/spoiler]

no tengo mucho conocimiento sobre las posiciones relativas de X e Y en el eventro draw_gui, pero imagino que si colocas una condicion algo asi
[gml]
if mouse_check_button(mb_left)
{
     if mouse_x >xinicial and mouse_x<xfinal and mouse_y >yinicial and mouse_y <yfinal//donde xinicial, xfinal,yinicial y yfinal son las coordenadas de tu boton
         {
           //tu codigo de creacion
         }
}
[/gml]

deberia de funcionar. porcierto te lo pongo anidado y no todo como una sola linea porque el gml no es inteligente, en el sentido de que el comprueba todas las variables aunque la primera sea falsa, entonces esto genera un peor rendimiento a la hora de ejecutarlo.
no puedo creer que me hice un tumblr.
YGE Productions yep, otro tumblr.
y como no, el manual tambien

1)- Te explicas  XD
2)- Fue lo primero que pensé, sólo que hay un pequeño (ENORME) inconveniente con eso:
La room es grande y la view se mueve, lo cual hace que el trabajo del GUI y VirtualKey entre en acción, así que no hay una posición fiha que pueda comprobar para NO ejecutar la acción del mouse...
alaberga regué el café.

BA:STFW&RTFM

Cita de: jmbs19 en Noviembre 24, 2015, 05:36:40 PM
no tengo mucho conocimiento sobre las posiciones relativas de X e Y en el eventro draw_gui, pero imagino que si colocas una condicion algo asi
[gml]
if mouse_check_button(mb_left)
{
     if mouse_x >xinicial and mouse_x<xfinal and mouse_y >yinicial and mouse_y <yfinal//donde xinicial, xfinal,yinicial y yfinal son las coordenadas de tu boton
         {
           //tu codigo de creacion
         }
}
[/gml]

deberia de funcionar. porcierto te lo pongo anidado y no todo como una sola linea porque el gml no es inteligente, en el sentido de que el comprueba todas las variables aunque la primera sea falsa, entonces esto genera un peor rendimiento a la hora de ejecutarlo.

como te dije imagino son posiciones relativas, pero con sacar un poco de matematicas no deveria de darte problema, seria algo como
[gml]
xinicial =xinicial_boton+view_xview
[/gml]

y asi tambien con todas las coordenadas
o tambien puedes hacer que se dibujen en el evento draw y usas las funciones de arriba para que siempre sigan la view.
http://docs.yoyogames.com/source/dadiospice/002_reference/windows%20and%20views/views/view_xview.html
no puedo creer que me hice un tumblr.
YGE Productions yep, otro tumblr.
y como no, el manual tambien

Bueno, como te dije, fue lo primero que pensé, pero sigue siendo imposible hacer eso ya que ES UN EDITOR DE NIVELES, lo cual significa que tiene Zoom(modficando las views) y esto hace que la posición del GUI difiera de la view....
Conclusión: OLVIDARSE DE COMPROBAR CON LAS VIEWS
alaberga regué el café.

BA:STFW&RTFM

jmbs, gml es lo más inteligente que he visto nunca, pongas como pongas el código funciona exactamente igual y lo tengo comprobadísimo, además de que eso es lo que dice todo el mundo en todos los lugares xD
[gml]if mouse_check_button(mb_left)
     if mouse_x >xinicial
     and mouse_x<xfinal
     and mouse_y >yinicial
     and mouse_y <yfinal//donde xinicial, xfinal,yinicial y yfinal son las coordenadas de tu boton
         {
           //tu codigo de creacion
         }[/gml]


esto es EXACTAMENTE LO MISMO que tu código, pero más ordenadito y bonito, dan ganas de comérselo xD
[spoiler="ola k ase clickarme o k ase"]la imagen no se quita xD
[/spoiler]

Yo me comería ese hermoso código  :P
De no ser por el FRUTO PROBLEMA QUE TENGO!
Voy a llorar  :'(
alaberga regué el café.

BA:STFW&RTFM

#14 Noviembre 24, 2015, 06:17:48 PM Ultima modificación: Noviembre 24, 2015, 06:24:12 PM por jmbs19
Cita de: kostra en Noviembre 24, 2015, 05:53:09 PM
jmbs, gml es lo más inteligente que he visto nunca, pongas como pongas el código funciona exactamente igual y lo tengo comprobadísimo, además de que eso es lo que dice todo el mundo en todos los lugares xD
[gml]if mouse_check_button(mb_left)
     if mouse_x >xinicial
     and mouse_x<xfinal
     and mouse_y >yinicial
     and mouse_y <yfinal//donde xinicial, xfinal,yinicial y yfinal son las coordenadas de tu boton
         {
           //tu codigo de creacion
         }[/gml]


esto es EXACTAMENTE LO MISMO que tu código, pero más ordenadito y bonito, dan ganas de comérselo xD

el funcionamiento es el mismo, y eso yo lo se, cuando te digo que no es inteligente me refiero a que no esta muy bien optimizado cuando de condicionales se habla.

te lo pongo asi:

supongamos que estoy comprobando esto en step:

[gml]
if ataque = true and distance_to_object(x,y,obj_a) < a and distance_to_object(x,y,obj_b) < b and distance_to_object(x,y,obj_c) < c and collision_rectangle(x-10,y-10,x+10,y+10)
{
//codigo
}
[/gml]

el juego se realentisaria mucho porque, suponiendo que ataque sea false igualmente paso a paso estara comprobando el collision_check y las distances, lo que son unos calculos pesados.

en cambio si se hace esto:
[gml]
if ataque = true
{
    distance_to_object(x,y,obj_a) < a and distance_to_object(x,y,obj_b) < b and distance_to_object(x,y,obj_c) < c
        {
         collision_rectangle(x-10,y-10,x+10,y+10)
             {
               //codigo
             }
        }
}
[/gml]

esta mas optimizado porque primero comprueba si a es true, si es true ve las posiciones, y luego checa la colision
si a es false no hace nada de eso, por lo que no haces calculos innecesarios.

niuweb si haces zoom es lo mismo, solo un poco mas trabajoso, por ejemplo puedes usar un escalar. tanto para el zoom como para la posicion relativa.
[gml]xinicial =view_xview+(xinicial_boton*zoom)[/gml]
no puedo creer que me hice un tumblr.
YGE Productions yep, otro tumblr.
y como no, el manual tambien