Modelo de comunicación basado en eventos para AS2
La lógica es sencilla: un objeto Emisor actúa como lanzador de cierto Evento, mientras que otro objeto Receptor escucha cierto Evento lanzado por un Emisor para hacer cualquier cosa. Tras muchas peleas ésta es la solución para ActionScript 2 que me ha proporcionado Zárate. En este ejemplo uso la librería GDispatcher de Grant Skinner, que añade a la de Flash varias funcionalidades para hacer más sencilla y potente la comunicación mediante eventos.
Por un lado tenemos el Emisor, que a los 2000 ms de ser instanciado crea el evento de tipo “miEvento” y lo lanza:
/**
* @author jmaestre
* @description Objeto Emisor, una vez instanciado lanza el evento "miEvento"
*/
import com.gskinner.events.GDispatcher;
class tests.events.Emisor {
public var addEventListener:Function;
public var removeEventListener:Function;
private var dispatchEvent:Function;
private var myInterval:Number;
function Emisor(){
GDispatcher.initialize(this);
// Lanza el evento a los dos segundos
this.myInterval = setInterval(this,"lanzaEvento",2000);
}
function lanzaEvento(){
// Creación del objeto evento
var ev:Object = new Object();
ev.type = "miEvento";
ev.msg = "Zarate rocks!"
// Evento lanzado para quien los escuche...
dispatchEvent(ev);
trace('Evento lanzado...');
// Soy muy limpito y cancelo en intervalo
clearInterval(this.myInterval);
}
}
Por otro lado tenemos al Receptor, que se pone a escuchar los eventos de tipo “miEvento” que lance el Emisor:
/**
* @author jmaestre
* @description Objeto Receptor, una vez instanciado se pone a escuchar el evento
* "miEvento" sobre el obj_emisor
*/
import tests.events.Emisor;
class tests.events.Receptor {
function Receptor(obj_emisor:Emisor){
// Me pongo a escuchar el evento 'mievento' al objeto emisor:obj_emisor,
// y al recibirlo invoco a mi método 'handler'
obj_emisor.addEventListener("miEvento",this,"handler");
}
function handler(ev:Object){
trace("Mensaje recibido: > " + ev.msg);
}
}
Y finalmente, la función principal que instancia ambos y le indica al Receptor a quien tiene que escuchar:
/**
* @author jmaestre
* @description Objeto de prueba, instancia Emisor y Receptor
* y le indica al Receptor a quien tiene que escuchar
*/
import tests.events.Emisor;
import tests.events.Receptor;
class tests.events.TestEventModel {
static public function main(){
trace(Flashout.DEBUG +"Flashout.DEBUG" ); //Necesaria para Flashout
//Creo Emisor
var obj_emisor:Emisor = new Emisor();
//Creo Receptor, diciéndole el Emisor al que tiene que escuchar
var obj_receptor:Receptor = new Receptor(obj_emisor);
}
}
Esta entrada fué escrita el Martes, 31 Octubre 2006 a las 2:23 y etiquetada con Desarrollo Web. Puedes seguir lo comentarios en el feed RSS 2.0. Deja tu comentario, o traza desde tu sitio web.


2 comentarios a “Modelo de comunicación basado en eventos para AS2”
“Zarate rocks!”
Esto me ha llegado
Hola si lo que quiero es añadir una function a un boton al hacer rollOver(press,relase..), mas o menos asi:
boton.onRollOver=talFunction
y tal function esta en otra clase a la cual no le veo function que sea estatica, me han hablado de usar esta tecnica(Zarate) pero no se como hacerlo, seria de gran ayuda algun consejo.
Gracias.
Tu comentario
Se requieren los campos indicados. El email nunca se publica o distribuye.
Puedes usar algo de HTML:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>Las URIs deben esta cualificadas (ej: http://www.nombredominio.com) y las etiquetas cerradas convenientemente.
Los párrafos y saltos de línea se convierten automágicamente.