la clase solo se puede llamar una vez ya q es estatic , lo hice asi para poder trabajar comodamente con dos clases y asi trabajo con ella desde cualquiere clase sin saber una referencia a la instancia de la clase Manager , si se quitara lo de estatic tendriamos un sistema de eventos parecidos a los componentes de flash ... , aunq yo casi prefiero usar metodos vacios ...
En mi caso un proyecto en 3d , tengo una clase camara q cuando se mueve tiene q llamar a un metodo a todas la instancia de la clase obj3D para actualizar sus posiciones en el escenario
Asi q con esto en la clase obj3D registro todas las instancias en la clase Manager y cada vez q muevo una camara llamo un metodo a todas las instancias obj3D ...
Mi ejemplo :
Código :
class Camara { private var cam :Object={x:0, y:100, z:0, ry:0, rz:0, focalDistance:600}; function Camara (pos:Object) { if (pos!=undefined) cam = pos; } function set _pos (pos:Object) { setPos3D(pos); } private function setPos3D (pos:Object) { for(var i in pos) cam[i] = pos[i]; //aqui llamo a un metodo a todos los de la lista Manager.lanzaMetodo({metodo:"setObj3D",parametros:cam}); } } class obj3D { function obj3D() { //aqui agrego cada instancia a una lista Manager.agregaMiembro(this); } }
No se igual es una aberracion , supongo q hay mas soluciones mas sencillas pero este me parecio mas elegante ...
Código :
//////////////////////////////////////////////////// // SISTEMA DE GESTION // // // Llamar un metodo solo a un grupo de instancias (lista) // // Tomate como ejemplo un foro , en un post tienes la opcion de que te manden un email // cuando alguien ha respondido algo en ese post , te puedes suscribirte o borrar de cualquier post // Cuando alguien responde al post es un evento y manda un email a todos los miembros de la lista q eso seria el metodo // Esto es parecido pero para mc , clases ... // class Manager { static private var oLista :Object= new Object(); /////// CONSTRUCTOR function Manager (){} /////// GESTION LISTAS static function agregaLista (lista:String):Void { oLista[lista]=new Object(); AsBroadcaster.initialize(oLista[lista]); } static function eleminaLista (lista:String):Void { delete oLista[lista]; } /////// GESTION MIEMBROS DE UNA LISTA static function agregaMiembro (miembro,lista:String):Void { lista =ifSimple (lista ); if(oLista[lista]==undefined)agregaLista (lista); oLista[lista].addListener(miembro); } static function eleminaMiembro (miembro:String,lista:String):Void { lista =ifSimple (lista ); oLista[lista].removeListener(miembro); } /////// LANZADOR DE METODOS static function lanzaMetodo (config:Object,lista:String):Void { lista =ifSimple (config.lista ); oLista[lista].broadcastMessage(config.metodo, config.parametros); } /////// COMPROBADOR SI ESTA A MODO SIMPLE private static function ifSimple (lista:String):String { if (lista==undefined) return "anonima"; else return lista } /////// para ver las lista y los miembros registrados static function toString ():String { var mensaje="******************************\n"; mensaje += "* class Manager\n" mensaje += "******************************\n"; mensaje +=dVerLista (); mensaje +=dVerMiembro(); return mensaje ; } static function dVerLista ():String { var count = 0; var mensaje = "__________verLista___________\n"; mensaje += " Lista : \n"; for (var i in oLista) { count++; mensaje += " " + i +"\n" } mensaje += " \n cantidad :" + count +"\n" return mensaje ; } static function dVerMiembro(lista):String { lista =ifSimple ( lista ); var count = 0; var mensaje = "__________verMiembros___________\n"; mensaje += " miembros : \n"; for (var i =0 ; i< oLista[lista]._listeners.length ; i++) { mensaje += " " + oLista[lista]._listeners[i]+"\n" } mensaje += "\n cantidad : " + oLista[lista]._listeners.length +"\n"; return mensaje ; } }
salu2