Comunidad de diseño web y desarrollo en internet online

Varios objetos de la misma Clase

Citar            
MensajeEscrito el 25 Sep 2009 01:25 am
Muy buenas a todos.
Haber quien me puede echar una manita, please.
Tengo un pelicula en la que tengo varios Mc instanciados con misma clase. Cuando hago click cualquiera de ellos, al "clickado", se le despliega encima un menu desplegable que contiene un combobox y un checkbutton. Este cuadro es un Mc que esta contenido dentro de los otros. Es decir, Mc(s) A que pertenecen a la Clase C --> contienen Mc B.
A mi me gustaria que cuando hiciese click sobre algun Mc A, si en algun otro esta desplegado el Mc B, éste desapareciera.
Mas o menos lo he conseguido pero no del todo bien.
Cuando hago click y aparece el Mc B, si selecciono algo en Combobox no hay ningun problema, o si lo hago en el checkbutton tambien. El problema es cuando algo lo selecciono en segunda instancia. Para que me entendais: Aparece el Mc B y le doy a seleccionar al combo... bien, sin problema. Pero ahora selecciono el check y conforme le haga click encima desaparece el Mc como cuando quiero que desaparezca, y en ese momento no debe desaparecer! Si el orden es al reves (check y depues combo) pasa lo mismo.
En cambio, no desaparece si no le doy click a nada, asi que si voy apretando Mc(s) A sin luego hacer click en los B que aparecen se van quedando todos esperando.
Yo pensaba que esto funcionaria bien controlando el foco, sabiendo donde esta en cada momento.
Os dejo los codigos de la clase y de lo que hay en el frame 1 de los Mc(s) A:
Clase

Código ActionScript :

package clases
{
   
   import flash.events.FocusEvent;
   import flash.events.Event;
   import flash.events.MouseEvent;
   import flash.display.MovieClip;

   public class cuadrado3D extends MovieClip
   {
      public function cuadrado3D():void 
      {
         addEventListener(MouseEvent.CLICK, onClick);
         addEventListener(FocusEvent.FOCUS_OUT, deseleccionar);
      }
      
      private function onClick(evento:MouseEvent):void
      {
         stage.focus = this.casilla;//para darle el foco
         mcSelFrame.gotoAndPlay(2);
         removeEventListener(MouseEvent.CLICK, onClick);
         /*borramos el listener porque sino cuando pulsaramos sobre alguna parte
         del menu desplegable volveria a parece éste como la primera vez*/
      }
      
      private function deseleccionar(evento:FocusEvent):void
      {
         if (mcSelFrame.currentFrame == 10)
         {
            mcSelFrame.gotoAndPlay(11);
         }
         addEventListener(MouseEvent.CLICK, onClick);
      }
   }
}


Frame

Código ActionScript :

stop();

mcSelFrame.movilMcSelFrame.niveles.addEventListener(Event.CHANGE, selFrame)

function selFrame(evento:Event):void
{
   this.gotoAndStop(mcSelFrame.movilMcSelFrame.niveles.selectedIndex + 1);
}


Espero que me hayais entendido (¬_¬U... no se yo si me he explicado muy bien) y que me podais ayudar.
Muchas gracias de antemano porque siempre dais consejos y soluciones muy utiles
Saludos!!!
XD

Por SeiyaJapon

54 de clabLevel



 

España

firefox
Citar            
MensajeEscrito el 25 Sep 2009 06:48 am
dos cosas
1.-No te hace falta remover el listener (y añadirlo) cada vez. Simplemente usa el método stopPropagation() para que no se siga capturando

Código ActionScript :

//en la función del click de los submenús
public function itemClick(e:Event){
       e.stopPropagation();
       .....resto de las acciones....
}

2.-Lo que se suele hacer es, cuando seleccionamos un menu, es deseleccionar TODOS salvo ese. el modo más efectivo lo tienes en la función selFrame

Código ActionScript :

function selFrame(evento:Event):void 
{ 
   var misMenus:Array=new Array(McA,McB,MCd) //(*)
   for (var mc:MovieClip in misMenus){
           if (mc!=evento.target){  //si es distinto del "target"
                   mc.deseleccionar()  //<--o como hagas para deseleccionar
           }
   }
}

(*)En ese array ponemos todos los MCs que haya que deseleccionar. si están dentro de un MC "contenedor" el array sería

Código ActionScript :

   var misMenus:Array=new Array(contenedor.McA,contenedor.McB,contenedor.MCd)

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 27 Sep 2009 05:11 pm
Muchas gracias!! Ahora mismo lo pruebo (no lo he hecho antes porque estaba de viaje :) )

Por SeiyaJapon

54 de clabLevel



 

España

firefox

 

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