Comunidad de diseño web y desarrollo en internet online

Problema (tonto?) con booleanos

Citar            
MensajeEscrito el 31 Ene 2011 03:28 pm
Muy buenas, soy nuevo en la pagina y en el tema del actionscript. Nunca habia hecho una web en flash, y mas o menos con las dudas de la gente y los tutoriales, me las he apañado, pero ahora ya me he atrancado de verdad. Os expongo el problema:

tengo 3 botones, y 3 textos, y cada boton activa la animacion de un texto, y a su vez la retirada del que estaba previamente. Esto lo estoy haciendo por medio de booleanos, pero el problema, o al menos, segun he leido, lo que creo que es el problema, es que al avanzar de frame, los booleanos ya no cojen el valor de false que les he dado de forma predeterminada en el primer frame, y al principio funciona bien, pero cuando haces mas de 1 click sobre el mismo boton, empiezan a superponerse los textos, o a funcionar de forma inversa...

espero haberme explicado, aqui os dejo el codigo en AS3, para que le echeis un ojo si quereis:

Código ActionScript :

var A:Boolean = false;
var M:Boolean = false;
var S:Boolean = false;

alma_btn.addEventListener(MouseEvent.CLICK, clickalma);
mani_btn.addEventListener(MouseEvent.CLICK, clickmani);
serv_btn.addEventListener(MouseEvent.CLICK, clickserv);

function clickalma(event:MouseEvent):void
{
   A=true;
   alma_btn.removeEventListener(MouseEvent.CLICK, clickalma);
   mani_btn.addEventListener(MouseEvent.CLICK, clickmani);
   serv_btn.addEventListener(MouseEvent.CLICK, clickserv);
   alma_mc.gotoAndPlay("in");
   gotoAndPlay("press1");
      
   if(M)
   {
      mani_mc.gotoAndPlay("out");
      M=false;
   }
   
   if(S)
   {
      serv_mc.gotoAndPlay("out");
      S=false;
   }
}

function clickmani(event:MouseEvent):void
{
   M=true;
   mani_btn.removeEventListener(MouseEvent.CLICK, clickmani);
   alma_btn.addEventListener(MouseEvent.CLICK, clickalma);
   serv_btn.addEventListener(MouseEvent.CLICK, clickserv);
   mani_mc.gotoAndPlay("in");
   gotoAndPlay("press2");
   
   if(A)
   {
      alma_mc.gotoAndPlay("out");
      A=false;
   }
   
   if(S)
   {
      serv_mc.gotoAndPlay("out");
      S=false;
   }
}

function clickserv(event:MouseEvent):void
{
   S=true;
   serv_btn.removeEventListener(MouseEvent.CLICK, clickserv);
   mani_btn.addEventListener(MouseEvent.CLICK, clickmani);
   alma_btn.addEventListener(MouseEvent.CLICK, clickalma);
   serv_mc.gotoAndPlay("in");
   gotoAndPlay("press3");
   
   if(A)
   {
      alma_mc.gotoAndPlay("out");
      A=false;
   }
   
   if(M)
   {
      mani_mc.gotoAndPlay("out");
      M=false;
   }
}

stop();


Supongo que sera una tonteria de novato, pero bueno, ya he buscado y no he encontrado solucion, sobre todo porque no se que busco...

Muchas gracias

Por Cyclops

101 de clabLevel



 

firefox
Citar            
MensajeEscrito el 31 Ene 2011 04:11 pm
El problema viene (creo) porque añades /quitas los listeners en mal sitio debería ser (vigila porque ando espeso)

Código ActionScript :

function clickalma(event:MouseEvent):void 
{ 
   //aquí "remuevo el listener para alma"
   A=true; 
   alma_btn.removeEventListener(MouseEvent.CLICK, clickalma); 
   alma_mc.gotoAndPlay("in"); 
   gotoAndPlay("press1"); 
       
   if(M) 
   { 
      mani_mc.gotoAndPlay("out"); 
      M=false; 
      //Sólo lo añado si M era true
      mani_btn.addEventListener(MouseEvent.CLICK, clickmani); 

   } 
    
   if(S) 
   { 
      serv_mc.gotoAndPlay("out"); 
      S=false; 
      //Sólo lo añado si S era true
      mani_btn.addEventListener(MouseEvent.CLICK, clickmani); 
   } 
} 

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 01 Feb 2011 01:32 pm
hola, gracias por responder tan rapido, pero le sigue pasando mas o menos lo mismo, no puedo asegurar nada, pero no creo que sea problema de los eventlistener, porqe eso aparentemente funciona bien.
Por si sirve de algo, la web es esta: http://psi-sl.com/web.html el problema esta en lineas de servicio, servicios logisticos. Asi podeis ver exactamente que es lo que pasa.

Por Cyclops

101 de clabLevel



 

firefox
Citar            
MensajeEscrito el 02 Feb 2011 07:25 am
Cyclops, yo lo que ví en el código que tienes es que, p.e. podías añadir varios listeners mani_btn.addEventListener(MouseEvent.CLICK, clickmani); sin antes removerlos (p.e. pulsando en alma_bt y luego en servi_bt). Y sigo pensando que es problema de los listeners. Si quieres para comprobarlo, cada vez que añadas un listener haz un "trace" y cada vez que lo elimines también, y los cuentas
En cualquier caso, una vez vista la página, me entran dudas de dónde están los botones. si alma_bt está DENTRO de alma_mc, deberíamos escribir

Código ActionScript :

alma_mc.alma_btn.addEventListener(MouseEvent.CLICK, clickalma); 
//y
alma_mc.alma_btn.removeEventListener(MouseEvent.CLICK, clickalma); 

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 04 Feb 2011 03:17 pm
no, alma_btn no esta dentro de alma_mc, alma_mc es el texto pero bueno, como me ha sido imposible hacerlo de esta forma, le he dejado siempre los listeners activados y aunque no hace el efecto que pretendia que hiciera, por lo menos funciona y no hay que volver atras, asi que me doy con un canto en los dientes, que tampoco puedo dedicarle mas tiempo a eso.

Muchas gracias por la ayuda eliseo.

Por Cyclops

101 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.