gotoAndLearn.com se actualiza. Los nuevos tiempos de los medios
Jan 20

Haciendo de las mías en AS3, lo primero que eché en falta fueron los delegates de AS2 que podían pasar parámetros:
[as]unboton.onRelease = Delegate.create(ambito, ambito.funcion, param1, param2,….paramN);[/as]

o también…

unboton.addEventListener("evento", Delegate.create(ambito, ambito.funcion, param1, param2,....paramN) );

Pues algo tan sencillo no he podido hacer en AS3, y vi que existían otras maneras de hacerlo, pero ninguna tan clara y fácil como la forma que usábamos en as2. Hasta que encontré esta maravillosa página donde dan la solución al problema con una simple clase “Callback” que sirve exactamente para estos menesteres. A partir de ahora, la utilizaré siempre ;)

Un ejemplo de uso en as3:

package
{
import xFramework.utils.Callback;
 
import flash.display.Sprite;
import flash.display.Shape;
import flash.events.MouseEvent;
import flash.events.Event;
 
public class CallbackTest extends Sprite
{
public function CallbackTest()
{
var s:Shape = new Shape();
s.graphics.beginFill(0x000000);
s.graphics.drawCircle(100, 100, 10);
s.graphics.endFill();
var cont : Sprite = new Sprite();
cont.addChild(s);
cont.addEventListener(MouseEvent.CLICK, Callback.create(onClicked, cont, "esto funciona"));
addChild(cont);
}
private function onClicked(event:Event, cont:Sprite, str2:String):void
{
trace(cont, str2);
}
}
}

3 Responses to “Pasar parámetros en un Delegate de ActionScript3”

  1. Carlos Says:

    También puedes usar esto:
    Boton1_bt.addEventListener(MouseEvent.CLICK,function(){Imprimir(1)});
    Boton2_bt.addEventListener(MouseEvent.CLICK,function(){Imprimir(2)});

    function Imprimir(numero){
    trace(”Se ha elegido el boton ” + numero);
    }

    Y también puedes usar el target.

  2. xleon Says:

    Me gusta esa opción, pero la del Callback me parece más limpia. De todas formas, es bueno saberlo. Gracias!

  3. Beto Says:

    Carlos te felicito muy buen tip

Leave a Reply