Cómo enumerar todas las clases contenidas dentro de un archivo SWF

votos
4

¿Hay alguna manera de obtener una lista de todas las clases contenidas dentro del SWF que se está ejecutando actualmente? Puede usar describeType en la raíz y luego recorrer la lista para encontrar todas las clases de instancias a las que se hace referencia en su aplicación, pero este método no funciona para las clases que se han incluido, pero no se han referenciado (referencias locales, por ejemplo).

Publicado el 12/03/2009 a las 20:46
fuente por usuario
En otros idiomas...                            


3 respuestas

votos
13

a partir de Flash Player 11.3, puede utilizar ApplicationDomain.getQualifiedDefinitionNames ().

ejemplo básico:

var definitions:Vector.<String> = this.loaderInfo.applicationDomain.getQualifiedDefinitionNames();

el código siguiente muestra cómo se listan todas las definiciones (incluyendo clases) para un archivo .swf en Flash Player 11.3, con un mensaje de fallo en las versiones anteriores de Flash Player:

var t:TextField;
t = new TextField();
t.width = 1200;
t.height = 700
t.border = true;
t.background = true;
t.text = "Definition List\n";
t.appendText("========================================\n");
var definitions:*;
if (this.loaderInfo.applicationDomain.hasOwnProperty("getQualifiedDefinitionNames")) {
  definitions = this.loaderInfo.applicationDomain["getQualifiedDefinitionNames"]();
  for (var i:int = 0; i < definitions.length; i++) {
    t.appendText(definitions[i] + "\n");
    t.scrollV = t.maxScrollV;
  }
} else {
  t.appendText("Could not read classes. For a class list, open this .swf "
               + "file in Flash Player 11.3 or higher. Your current "
               + "Flash Player version is: " + Capabilities.version);
}
addChild(t);

Para obtener una lista de las clases en Flash Player 11.2 y mayores, usted debe leer los bytes de la .swf y analizar los nombres de las clases de forma manual. aquí hay dos bibliotecas conocidas que demuestran:

SWFExplorer de Thibault Imbert

http://www.bytearray.org/?p=175

getDefinitionNames de Denis Kolyako ()

http://etcs.ru/blog/as3/getdefinitionnames/

http://etcs.ru/pre/getDefinitionNamesSource/

Respondida el 01/11/2012 a las 21:53
fuente por usuario

votos
1

Una alternativa tal vez:

En el primer cuadro de la SWF incorporado, establecer una propiedad de una lista de todas las clases que desee que estén disponibles.

p.ej:

this.availableClasses = ["MainMenuClass", "SmileyFaceClass", "JumpButtonClass"];

A continuación, en la carga:

var classes:Array = loader.content.availableClasses;
var domain:ApplicationDomain = loader.loaderInfo.applicationDomain;
var classType:Class;
var clip:*;
for each(var className:String in classes) {
  classType = domain.getDefinition(className);
  clip = new classType();
}
Respondida el 20/11/2011 a las 00:13
fuente por usuario

votos
-1

Como sé, no es posible

Respondida el 18/03/2009 a las 06:22
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more