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

