In Flex/AS3, come faccio a ottenere una definizione di classe di una risorsa incorporata con getDefinitionByName

StackOverflow https://stackoverflow.com/questions/87557

Domanda

Ho una classe con molti embedded attività.

All'interno della classe, vorrei ottenere la definizione di classe di un bene in base al nome.Ho provato con getDefinitionByName(), e anche ApplicationDomain.currentDomain.getDefinition (), ma né lavoro.

Esempio:

public class MyClass
{
  [Embed(source="images/image1.png")] private static var Image1Class:Class;
  [Embed(source="images/image2.png")] private static var Image2Class:Class;
  [Embed(source="images/image3.png")] private static var Image3Class:Class;

  private var _image:Bitmap;

  public function MyClass(name:String)
  {
    var ClassDef:Class = getDefinitionByName(name) as Class;  //<<-- Fails
    _image = new ClassDef() as Bitmap;    
  }
}

var cls:MyClass = new MyClass("Image1Class");
È stato utile?

Soluzione

Questo non risponde alla tua domanda, ma si può risolvere il vostro problema.Credo che fare qualcosa come questo dovrebbe funzionare:

public class MyClass
{
  [Embed(source="images/image1.png")] private static var Image1Class:Class;
  [Embed(source="images/image2.png")] private static var Image2Class:Class;
  [Embed(source="images/image3.png")] private static var Image3Class:Class;

  private var _image:Bitmap;

  public function MyClass(name:String)
  {
    _image = new this[name]() as Bitmap;    
  }
}

var cls:MyClass = new MyClass("Image1Class");

Sto avendo un momento difficile ricordare se le parentesi opere in classi chiuse.Se non, una soluzione semplice è quello di marcare la classe come dinamica.

Altri suggerimenti

Il motivo per cui il metodo non funziona è perché "Image1Class" è un variabile nome, non l'effettivo Nome della classe.

È possibile ottenere il nome della classe come questo

import flash.utils.getQualifiedClassName;
trace(getQualifiedClassName(Image1Class));

Che come si può vedere, significa che il nome della classe (quella che dovrebbe essere passato alla funzione) è qualcosa di simile MyClass_Image1Class.

Non c'è bisogno di utilizzare qualsiasi fantasia getDefinitionByName() metodi, semplicemente riferirsi ad esso in modo dinamico.Nel tuo caso, sostituire il 'Fallisce' riga con:

var classDef:Class = MyClass[name] as Class;

E che dovrebbe fare.

Grazie mille!Ho appena speso quasi 5 ore e ore cercando di ottenere il POS getDefinitionByName di lavoro con la getQualifiedClassName che ero pronto a buttare la roba!!Il mio ultimo lavoro codice simile a questo e prende anche il nome della stringa a partire da un array.

CreatureParam è un 2 dimensione array di stringhe;

Il tipo è un numero intero che viene inviato al flash da tag HTML, che è sua volta deriva da un database MYSQL tramite PHP.

Mark1_cb è una combobox che è sul palco e ha un nome di istanza.È uscita anche un numero intero.

Quindi, questo codice direttamente sotto le importazioni di classe "BirdBodyColor_mc" da un swf esterno "ArtLibrary.swf".BirdBodyColor_mc è un movieclip creato da un'immagine png.Nota è necessario fare doppio clic sul movieclip in ArtLibrary.fla e inserire un secondo fotogramma chiave.Movieclips apparentemente bisogno di due fotogrammi o flash tenta di importare come sprite e le cause di una mancata corrispondenza del tipo.

[Embed(source="ArtLibrary.swf", simbolo="BirdBodyColor_mc")] var BirdBodyColor_mc:Classe;

Normalmente, vorrei mettere un'istanza di questa classe movieclip sullo stage utilizzando questo codice.

myMC:MovieClip = new BirdBodyColor_mc();addChild(myMC);

var Definizione:Class = this["BirdBodyColor_mc"] come Classe;var 1:MovieClip = new Definizione();

Ma ho bisogno di fare questo utilizzando un valore di stringa cercata nel mio array.Così qui è il codice per che.

var Definizione:Class = questo[CreatureParam[Tipo][Mark1_cb + 2]] come Classe;var 1:MovieClip = new Definizione();

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top