Agosto 12, 2017, 07:28:46 AM Ultima modificación: Agosto 12, 2017, 09:26:27 PM por nahuel0688
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.

#1 Agosto 12, 2017, 07:32:28 AM Ultima modificación: Agosto 12, 2017, 07:53:25 AM por NiuWeb
¿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í.
alaberga regué el café.

BA:STFW&RTFM

#2 Agosto 12, 2017, 09:51:11 AM Ultima modificación: Agosto 12, 2017, 09:53:11 AM por Zapdos43
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;   
        }     

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.