soy novato en actionscript y por ahora iba aprendiendo sin problemas hasta que al hacer una prueba para pasar un evento entre clases la cosa se ha parado. Inicialmenet (luego me ha surgido una curiosidad no esperada con un timer. Esta descrito más abajo) quería comprobar desde una clase la pulsación de un boton en otraclase distinta. Declaré mi propia subclase de evento y mi listener pero desde el listener no recibía nada. Fuy reduciendo el código para despejar errores y al final llegué a esta sencilla prueba. Tengo un Main.as desde el que quiero procesar un evento disparado en otra clase(events.Sender). El código es muy pequeño:
La clase principal:
Código :
package { import flash.display.MovieClip; import flash.events.*; import flash.utils.Timer; import events.Sender; public class Main extends MovieClip { private var sender:Sender = new Sender(); public function Main() { // add callback function addEventListener(Sender.EVENT_NAME,processEvent,false,0,true); // start timer var myTimer:Timer = new Timer(2000, 2); myTimer.addEventListener("timer", timerHandler); myTimer.start(); } public function timerHandler(event:TimerEvent):void { trace("timerHandler: " + event); sender.fireEvent(); } public function processEvent(e:Event) { trace("processEvent() Got:" +e); } } }
La clase Sender:
Código :
//file events/Sender.as package events{ import flash.events.Event; import flash.display.MovieClip; public class Sender extends MovieClip{ public static const EVENT_NAME:String='my_event'; public function Sender() { trace("Sender()"); } public function fireEvent():void { dispatchEvent( new Event(Sender.EVENT_NAME)); trace("Sender.triggerOptionSelected() DISPATCHED"); } } }
Aquí teneis la salida:
Código :
Sender() timerHandler: [TimerEvent type="timer" bubbles=false cancelable=false eventPhase=2] Sender.fireEvent() DISPATCHED timerHandler: [TimerEvent type="timer" bubbles=false cancelable=false eventPhase=2] Sender.fireEvent() DISPATCHED
Cuando miro el output suceden dos cosas:
1º la función timerHandler() se llama dos veces: no entiendo por qué no se llama solo una
2º la función processEvent() no se llama nunca: esto era mi duda inicial
He revisado muchos tutoriales y he ido simplificando hasta llegar a esto, pero la verdad es que después de darle mil vueltas no sé por qué suceden estas dos cosas.
Agradecería mucho que alguien me orientase un poco sobre qué estoy haciendo mal, o cual sería la manera optima para procesar pulsaciones de boton desde otra clase.
Muchas gracias