Comunidad de diseño web y desarrollo en internet online

Crear funcion de nombre dinamico

Citar            
MensajeEscrito el 08 Nov 2009 02:34 am
Que tal compañeros del foro, tengo una duda, de que manera se pueden crear funciones dinamicas en as3?..la duda parte del siguiente codigo:

Código :

btnHistoria3.addEventListener(MouseEvent.MOUSE_OVER,function(){btnHistoria3F("RO")});
btnHistoria3.addEventListener(MouseEvent.MOUSE_OUT,function(){btnHistoria3F("RU")});
btnHistoria3.addEventListener(MouseEvent.CLICK,function(){btnHistoria3F("CC")});
function btnHistoria3F(e:String) {
   if (e=="RO") {
      new Tween(btnHistoria3, "alpha", None.easeNone, btnHistoria3.alpha, .5, .2, true);
   }
   if (e=="RU") {
      new Tween(btnHistoria3, "alpha", None.easeNone, btnHistoria3.alpha, 1, .2, true);
   }
   if (e=="CC") {
      new Tween(btnHistoria3, "alpha", None.easeNone, 1, .5, .2, true);
   }
}

Como btnHistoria3 puede ser btnHistoria1,btnHistoria2,..,btnHisotoriaN me gustaria crear las funciones de forma "dinamica" y de esa forma crear una funcion para que cuando la llame solo tenga que mandar el nombre del boton a esta y que el boton tenga las funciones que puse en el codigo anterior.
De antemano gracias.

Por tonatiuh

21 de clabLevel



 

firefox
Citar            
MensajeEscrito el 08 Nov 2009 05:30 pm
No creo que sea necesario tener mas funciones con una sola lo puedes hacer, pero para eso cambias un poquito tu codigo:

Código ActionScript :

btnHistoria3.addEventListener(MouseEvent.MOUSE_OVER,EventHandler);
btnHistoria3.addEventListener(MouseEvent.MOUSE_OUT,EventHandler);
btnHistoria3.addEventListener(MouseEvent.CLICK,EventHandler);


function EventHandler(e:MouseEvent){
//la funcion recibe de parametro "e" un mouse event puedes usar el type para diferenciar el tipo de evento

//usa un trace(e.type) para saber que cadenas poner porq no las recuerdo bien
switch(e.type){
case "mouseOver":
//En lugar de btnHistoriaX usas el currentTarget del evento (que en tu caso sera el boton con el listener)
new Tween(e.currentTarget, "alpha", None.easeNone, e.currentTarget.alpha, .5, .2, true);
break;

case "mouseOut" :
new Tween(e.currentTarget, "alpha", None.easeNone, e.currentTarget.alpha, 1, .2, true);
break;

case "click":
//lo mismo para el click :P
break;
}
}



Usando el "type" del evento que tmb es una cadena sigue tu misma logica de dependiendo el evento hacer algo y con el currentTarget lo haces a cualquier objeto:

Código ActionScript :

btnHistoria3.addEventListener(MouseEvent.MOUSE_OVER,EventHandler);
btnHistoria3.addEventListener(MouseEvent.MOUSE_OUT,EventHandler);
btnHistoria3.addEventListener(MouseEvent.CLICK,EventHandler);

btnHistoria2.addEventListener(MouseEvent.MOUSE_OVER,EventHandler);
btnHistoria2.addEventListener(MouseEvent.MOUSE_OUT,EventHandler);
btnHistoria2.addEventListener(MouseEvent.CLICK,EventHandler);

btnHistoriaX.addEventListener(MouseEvent.MOUSE_OVER,EventHandler);
btnHistoriaX.addEventListener(MouseEvent.MOUSE_OUT,EventHandler);
btnHistoriaX.addEventListener(MouseEvent.CLICK,EventHandler);

Por Angel Roberto

Claber

248 de clabLevel



 

firefox
Citar            
MensajeEscrito el 11 Nov 2009 11:46 pm
Que tal compañero Angel Roberto, disculpa que no te haya respondido inmediatamente, lo que pasa es que quise implementar primero esto que me dijiste para ya despues en base a eso responder, te comento que implemente la idea que me comentaste, y me fue muy util, aqui te muestro lo que realice (aclaro que este es otro archivo de flash, pero la problematica era la misma que en el problema que plantie en el primer mensaje de este post):

Código ActionScript :

import caurina.transitions.Tweener;//clase que descargue de internet y que viene a ser muy parecida a la clase "fl.transitions" que ya trae flash, y que ofrece mas flexibilidad y funcionalidad supuestamente 
MovieClip(this.parent).mcTira.ff=new int(1);
var ffF:int= MovieClip(this.parent).mcTira.ff;

MovieClip(this.parent).mcTira.mcTiraF1.addEventListener(MouseEvent.ROLL_OVER, mcTiraFXF);
MovieClip(this.parent).mcTira.mcTiraF1.addEventListener(MouseEvent.ROLL_OUT, mcTiraFXF);
MovieClip(this.parent).mcTira.mcTiraF1.addEventListener(MouseEvent.CLICK, mcTiraFXF);
MovieClip(this.parent).mcTira.mcTiraF2.addEventListener(MouseEvent.ROLL_OVER, mcTiraFXF);
MovieClip(this.parent).mcTira.mcTiraF2.addEventListener(MouseEvent.ROLL_OUT, mcTiraFXF);
MovieClip(this.parent).mcTira.mcTiraF2.addEventListener(MouseEvent.CLICK, mcTiraFXF);
MovieClip(this.parent).mcTira.mcTiraF3.addEventListener(MouseEvent.ROLL_OVER, mcTiraFXF);
MovieClip(this.parent).mcTira.mcTiraF3.addEventListener(MouseEvent.ROLL_OUT, mcTiraFXF);
MovieClip(this.parent).mcTira.mcTiraF3.addEventListener(MouseEvent.CLICK, mcTiraFXF);
MovieClip(this.parent).mcTira.mcTiraF4.addEventListener(MouseEvent.ROLL_OVER, mcTiraFXF);
MovieClip(this.parent).mcTira.mcTiraF4.addEventListener(MouseEvent.ROLL_OUT, mcTiraFXF);
MovieClip(this.parent).mcTira.mcTiraF4.addEventListener(MouseEvent.CLICK, mcTiraFXF);

function mcTiraFXF(e:Event) {
   switch (e.type) {
      case "rollOver" :
         Tweener.addTween(e.currentTarget, {alpha:.8, time:.5, transition:"easeOutQuart"});
         break;
      case "rollOut" :
         Tweener.addTween(e.currentTarget, {alpha:1, time:.5, transition:"easeOutQuart"});
         break;
      case "click" :
         e.currentTarget.alpha=1;
         Tweener.addTween(e.currentTarget, {alpha:.8, time:.5, transition:"easeOutQuart"});
         switch (e.currentTarget.name) {
            case "mcTiraF1" :
               MovieClip(this.parent).mcTira.ff=1;
               break;
            case "mcTiraF2" :
               MovieClip(this.parent).mcTira.ff=2;
               break;
            case "mcTiraF3" :
               MovieClip(this.parent).mcTira.ff=3;
               break;
            case "mcTiraF4" :
               MovieClip(this.parent).mcTira.ff=4;
               break;
         }
         ffF= MovieClip(this.parent).mcTira.ff;
         lImagen.load(new URLRequest ("empresa/proceso/"+ffF+"/1.jpg"));
         break;
   }
}


Ahora, otra pequeña duda, habria manera de comprimir esta parte del codigo?:

Código ActionScript :

MovieClip(this.parent).mcTira.mcTiraF1.addEventListener(MouseEvent.ROLL_OVER, mcTiraFXF);
MovieClip(this.parent).mcTira.mcTiraF1.addEventListener(MouseEvent.ROLL_OUT, mcTiraFXF);
MovieClip(this.parent).mcTira.mcTiraF1.addEventListener(MouseEvent.CLICK, mcTiraFXF);
MovieClip(this.parent).mcTira.mcTiraF2.addEventListener(MouseEvent.ROLL_OVER, mcTiraFXF);
MovieClip(this.parent).mcTira.mcTiraF2.addEventListener(MouseEvent.ROLL_OUT, mcTiraFXF);
MovieClip(this.parent).mcTira.mcTiraF2.addEventListener(MouseEvent.CLICK, mcTiraFXF);
MovieClip(this.parent).mcTira.mcTiraF3.addEventListener(MouseEvent.ROLL_OVER, mcTiraFXF);
MovieClip(this.parent).mcTira.mcTiraF3.addEventListener(MouseEvent.ROLL_OUT, mcTiraFXF);
MovieClip(this.parent).mcTira.mcTiraF3.addEventListener(MouseEvent.CLICK, mcTiraFXF);
MovieClip(this.parent).mcTira.mcTiraF4.addEventListener(MouseEvent.ROLL_OVER, mcTiraFXF);
MovieClip(this.parent).mcTira.mcTiraF4.addEventListener(MouseEvent.ROLL_OUT, mcTiraFXF);
MovieClip(this.parent).mcTira.mcTiraF4.addEventListener(MouseEvent.CLICK, mcTiraFXF);

Me gustaria saber la forma, ya que todas estas lineas fueron necesarias solo para 4 botones, como ves son muchas lineas y realmente son muy pocos botones, ahora si fuesen muchos botones el numero de lineas de codigo seria colosal.

Gracias por tomarte la molestia de contestar mis mensajes.
PD: dejo el enlace del sitio oficial de la clase caurina, por si a alguien le interesa. http://code.google.com/p/tweener/

Por tonatiuh

21 de clabLevel



 

firefox

 

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