actionscript 3 - que - Clase de creación de instancias AS3 desde SWF externo
swf download (5)
Por lo tanto, parece que no puede hacer una instancia de una clase a menos que se cumpla dentro del SWF del proyecto.
Pruebe la clase ModuleLoader
. Vea este artículo sobre cómo crear módulos.
Estaba hablando con mi amigo sobre esto, está convencido de que puedes hacer esto y dice que lo ha hecho, pero no puedo hacer que esto funcione.
Me pregunto si es posible. Traté de escribir una var como clase que está dentro del archivo SWF descargado externamente y luego crear una instancia pero no puedo hacerlo.
algún código
private static function onCompleteHandler(e:Event) {
dashboardObject = e.target.content;
// registerClassAlias("Dashboard", ); doesnt work
var dash:Class = getDefinitionByName("Dashboard") as Class;
var myDash = new dash();
trace(myDash.show);
}
Error
ReferenceError: Error #1065: Variable Dashboard is not defined.
at global/flash.utils::getDefinitionByName()
at System$/onCompleteHandler()
Por lo tanto, parece que no puede hacer una instancia de una clase a menos que se cumpla dentro del SWF del proyecto. Lo cual si es cierto es lo que quiero que haga. No quiero que la gente intente crear instancias de mis clases simplemente descargando el archivo SWF para lo que estoy creando aquí.
Gracias
Tienes que hacer dos cosas:
- Proporcione a
Dashboard
un paquete (package.to.Dashboard
). Las clases sin paquete tienen diferentes atributos (un espacio de nombre protegido) en forma compilada que aquellos con paquetes, lo que los hace inaccesibles para archivos SWF externos. - Asegúrese de que su SWF cargado esté cargado en el mismo ApplicationDomain que el padre
Debería poder usar getDefinitionByName
del getDefinitionByName
SWF cargado y la Class
return.
Recomiendo usar CASALib para esto. Creé una aplicación completa en la que no conocía los nombres de las clases hasta el tiempo de ejecución. Acabo de crear algunas interfaces para garantizar que las funciones más importantes estuvieran siempre disponibles. La utilidad CASALib llamada LibraryManager tiene una función para instanciar una clase desde un SWF externo.
var loader:Loader = new Loader();
var req:URLRequest = new URLRequest("foo.swf");
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, fooLoadComplete);
loader.load(req);
function fooLoadComplete(e:Event):void
{
var ClassDefinition:Class = e.target.applicationDomain.getDefinition("Symbol1") as Class;
var sym1:MovieClip = new ClassDefinition();
this.addChild(sym1);
}
Es posible que desee hacer esto:
var dash:Class = Loader(e.target).contentLoaderInfo
.applicationDomain.getDefinition("Dashboard") as Class;
getDefinitionByName()
funciona para las clases cargadas por el swf actual, no las swfs externas. Para swf externo necesita dar la referencia del objeto cargador que realmente cargó el swf particular.
Además, si estás haciendo esto en FlashBuilder, asegúrate de que la "aplicación principal" en el SWF que estás cargando sea un Sprite (o posiblemente un MovieClip, aunque no lo haya probado), no una Aplicación (como tú obtener el archivo MXML predeterminado creado para un nuevo proyecto SWF). De lo contrario, el código anterior no podrá encontrar la definición de clase que está buscando.