Aquí podría ser tu PUBLICIDAD


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 artman
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 09:53
fuente por usuario colin moock


Aquí podría ser tu PUBLICIDAD


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 12:13
fuente por usuario Markavian

votos
-1

Como sé, no es posible

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