Comunidad de diseño web y desarrollo en internet online

clases y menu

Citar            
MensajeEscrito el 27 Jul 2010 02:05 pm
hola a tod@s

tengo esta clase asociada a un clip de la biblioteca

Código ActionScript :

package {
   import flash.display.MovieClip;
   import flash.events.MouseEvent;
   import flash.events.Event;
   public class Boton extends MovieClip {
      public function Boton():void {
         this.useHandCursor = true;
         this.buttonMode = true;
         this.addEventListener(MouseEvent.MOUSE_OVER, mouse_over);
         this.addEventListener(MouseEvent.MOUSE_OUT, mouse_out);
         this.addEventListener(MouseEvent.CLICK, mouse_click);
      }
      private function mouse_over(e:MouseEvent):void {
         trace("cursor dentro");
      }
      private function mouse_out(e:MouseEvent):void {
         trace("cursor fuera");
      }
      private function mouse_click(e:MouseEvent):void {
         root["funcion"]();
      }
   }
}


con un bucle y addChild pongo unos cuantos clips en el stage que me van a servir de menu.
en AS2 para que el clip pulsado quedara desactivado y el resto activado hacia lo siguiente:

Código ActionScript :

boton.onPress = function() {
   for (k=0; k<arrayBoton.length; k++) {
      contenedor["boton"+k].bt.enabled = true;
   }
   this.enabled = false;
};


pero en AS3 y con las clases (que todavia me llevan un poco liada...) nno me aclaro.

alguna ayuda de como hacerlo?

milchisimas gracias

Por kaquna

68 de clabLevel



Genero:Femenino  

firefox
Citar            
MensajeEscrito el 27 Jul 2010 02:35 pm
he probado a cambiar esto

Código ActionScript :

private function mouse_click(e:MouseEvent):void {
   root["funcion"]();
   this.removeEventListener(MouseEvent.MOUSE_OVER, mouse_over);
   this.removeEventListener(MouseEvent.MOUSE_OUT, mouse_out);
   this.removeEventListener(MouseEvent.CLICK, mouse_click);
}


se me desactiva el que he pulsado pero después no se como activarlo de nuevo cuando se pulsa otro distinto

alguna ayuda, plis?

milgracias

Por kaquna

68 de clabLevel



Genero:Femenino  

firefox
Citar            
MensajeEscrito el 27 Jul 2010 04:41 pm
porque si intento activarlos asi no funciona (que es -o lo parece- lo que hacia con AS2)

Código ActionScript :

for (var i:int = 0; i<root["menuArray"].length; i++) {
   var clip = this.parent.getChildByName("itemMenu" + i);
   clip.addEventListener(MouseEvent.MOUSE_OVER, mouse_over);
   clip.addEventListener(MouseEvent.MOUSE_OUT, mouse_out);
   clip.addEventListener(MouseEvent.CLICK, mouse_click);
}

Por kaquna

68 de clabLevel



Genero:Femenino  

firefox
Citar            
MensajeEscrito el 27 Jul 2010 09:23 pm
Almacena en una variable la referencia de root o la clase Main( Document Class) sea el cazo.
En la clase Main declara una función que reciba como parámetro la referencia de quien hizo click , ahora en as3 está la propiedad mouseEnabled con la cual inhabilitas los eventos del ratón a los objetos interactivos, en esa función solo compruebas los objetos en escena con el que se hizo click pequeño ejemplo :

Document Class , Main.as

Código ActionScript :

package
{
   import flash.display.Sprite;
   
   public class Main extends Sprite
   {
      private var _navMenu:Sprite;//contenedor de los botones
      
      public function Main()
      {
         buildMenu();
      }
      
      private function buildMenu():void
      {
         _navMenu = new Sprite();
         addChild(_navMenu);
         //creas 5 botones
         for(var i:uint=0; i<5; i++)
         {
            var b:Boton = new Boton();
            b.name = "boton" + i;//asignas un name
            b.refRoot = this;//le pasas la referencia de main "this"
            b.x = (b.width + 2) * i;
            _navMenu.addChild(b);//agregas al contenedor
         }
      }
      
      public function enabledOject(t:Boton):void
      {
         trace("target click :" + t.name );//prueba

         //obtienes los childrens del contenedor
         for(var i:uint=0; i<_navMenu.numChildren; i++)
         {
            //creamos una variable que haga referencia al chidlren
            var b:Boton = _navMenu.getChildAt(i) as Boton;
            //comparas
            if(b != t)
            {
               b.mouseEnabled = true;
               b.alpha = 1;//siempre estara en alpha 1.. solo por prueba
            }
         }
         //seteas inabilitado para al raton el que fue clickado
         t.mouseEnabled = false;
         t.alpha =0.8;//alpha bajo , para comprobar...
      }
   }
}


Boton.as

Código ActionScript :

package
{
   import flash.display.MovieClip;
   import flash.events.MouseEvent;
   
   public class Boton extends MovieClip
   {
      public var refRoot:*;
      
      public function Boton()
      {
         super();
         this.buttonMode = true;
         
         this.addEventListener(MouseEvent.ROLL_OUT,onRollOut);
         this.addEventListener(MouseEvent.ROLL_OVER,onRollOver);
         this.addEventListener(MouseEvent.CLICK, onClick);
      }
      
      private function onRollOut(e:MouseEvent):void
      {
         //trace("target :" + e.target , "event :" + e.type);
      }
      
      private function onRollOver(e:MouseEvent):void
      {
         //trace("target :" + e.target , "event :" + e.type);   
      }
      
      private function onClick(e:MouseEvent):void
      {
         //detectas que no sea null
         if(refRoot)
         {
            //llamas a la funcion de la clase main , le pasas como arg el boton
            refRoot.enabledOject(this);
         }
      }
   }
}


PD. no es la manera mas elegante de lograr esto, puedes estudiar sobre OOP y comunicar clases con EventDispatcher.

Jonathan

Por maneuver

243 de clabLevel



Genero:Masculino  

Mexico City

chrome
Citar            
MensajeEscrito el 28 Jul 2010 06:04 am
milgracias por tu ayuda. voy a ver si me aclaro...

Por kaquna

68 de clabLevel



Genero:Femenino  

firefox
Citar            
MensajeEscrito el 28 Jul 2010 09:18 am
vale, lo he probado y funciona, con la salvedad de que el boton pulsado, aunque cambie el alpha, sigue teniendo asignados los eventlisteners y los botones siguen pudiendo ser pulsados, realmente no se desactivan.

tambien he observado que, aunque al ser un movieclip con las lineas de buttonMode = true y useHandCursor = true, el cursor no cambia de flecha a mano...

Por kaquna

68 de clabLevel



Genero:Femenino  

firefox
Citar            
MensajeEscrito el 28 Jul 2010 07:50 pm
respecto a lo que mencionas el alpha es cosa X , lo que importa es la propiedad mouseEnabled , yo he probado el codigo y si se desactivan , ahora con lo del raton o usas uno u otro, con buttonMode = true basta.

Jonathan

Por maneuver

243 de clabLevel



Genero:Masculino  

Mexico City

firefox
Citar            
MensajeEscrito el 29 Jul 2010 02:27 pm
bueno... me lo revisare. al ser nueva en AS3 seguro que se me pasa algo...

gracias de todo

Por kaquna

68 de clabLevel



Genero:Femenino  

firefox

 

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