Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: nahuel0688 en Agosto 12, 2017, 07:28:46 AM

Título: [RESUELTO] Mostrar una imagen por cada click del mismo objeto
Publicado por: nahuel0688 en Agosto 12, 2017, 07:28:46 AM
Hola que tal, soy nuevo en esto y tengo una duda la cuál ya busqué en el foro pero no logro destrabarlo. Actualmente tengo un objeto el cual presiono e inserta una imagen y luego presiono el mismo objeto para que inserte otro imagen más y así sucesivamente.
El codigo que tengo armado es:

CREATE
v_nscont = 0; presionando= false;

ALARM
if (presionando) // si la variable sigue siendo "true" significa que no hemos soltado el boton izquierdo y que seguimos dentro del área del sprite
{
      instance_destroy();
}

STEP
if mouse_check_button_pressed(mb_left) and v_nscont = 0
    { 
        with (ob_nfosforo1)
            { visible = true;
              presionando= true; 
            }
   
    if mouse_check_button_released(mb_left) // si dejamos de presionar el boton izquierdo del mouse
            {
                 presionando= false;
                 v_nscont = 1;
            }     
    }

if mouse_check_button_pressed(mb_left) and v_nscont == 1
    { 
        with (ob_nfosforo2)
            { visible = true;
              presionando= true;       
            }     
    } 
   
if mouse_check_button_released(mb_left) // si dejamos de presionar el boton izquierdo del mouse
        {
                 presionando= false;
                 v_nscont = 2;   
        }     

El problema es que no puedo resolver el tema de que me tome los distintos clicks al ir presionando y soltando, hay algo que no estoy haciendo bien. De esta forma me está insertando las 2 imagenes pero si agrego una tercera no anda porque es como que no reconoce cuando estoy soltando el segundo click.
Agradezco su ayuda.

Saludos.
Título: Re:Mostrar una imagen por cada click del mismo objeto
Publicado por: bygdle en Agosto 12, 2017, 07:32:28 AM
¿Las "imágenes" son distintos objetos invisibles puestos en la sala?
Suponiendo que es así, podrías hacer esto:
[gml]
///Evento create
objetos[0] = ob_fosforo1;
objetos[1] = ob_fosforo2;
//...

indice = 0;
[/gml]
[gml]
///Evento left pressed
for(var i = 0; i < array_length_1d(objetos); i++)
{
    objetos.visible = false;
}
objetos[indice++].visible = true;
if(indice >= array_length_1d(objetos)) indice = 0;
[/gml]
Eso, según lo que entendí.
Título: Re:Mostrar una imagen por cada click del mismo objeto
Publicado por: Zapdos43 en Agosto 12, 2017, 09:51:11 AM
Podrías probar a poner un "else".

STEP
if mouse_check_button_pressed(mb_left) and v_nscont == 0
    { 
        with (ob_nfosforo1)
            { visible = true;
              presionando= true; 
            }
     }
   
else if mouse_check_button_released(mb_left)
            {
                 presionando= false;
                 v_nscont = 1;
            }     

if mouse_check_button_pressed(mb_left) and v_nscont == 1
    { 
        with (ob_nfosforo2)
            { visible = true;
              presionando= true;       
            }     
    } 
   
else if mouse_check_button_released(mb_left)
        {
                 presionando= false;
                 v_nscont = 2;   
        }     
Título: Re:Mostrar una imagen por cada click del mismo objeto
Publicado por: nahuel0688 en Agosto 12, 2017, 09:25:45 PM
Cita de: NiuWeb en Agosto 12, 2017, 07:32:28 AM
¿Las "imágenes" son distintos objetos invisibles puestos en la sala?
Suponiendo que es así, podrías hacer esto:
[gml]
///Evento create
objetos[0] = ob_fosforo1;
objetos[1] = ob_fosforo2;
//...

indice = 0;
[/gml]
[gml]
///Evento left pressed
for(var i = 0; i < array_length_1d(objetos); i++)
{
    objetos.visible = false;
}
objetos[indice++].visible = true;
if(indice >= array_length_1d(objetos)) indice = 0;
[/gml]
Eso, según lo que entendí.

Gracias a ambos por las respuestas, con este código lo que hacía era ir apareciendo las imagenes pero desaparecía la anterior cuando aparecía la segunda, asi que en el evento LEFT PRESSED le deje lo siguiente y anda bien:

objetos[indice++].visible = true;

if(indice >= array_length_1d(objetos)) indice = 0;

Saludos y una vez más gracias.