Frage

Ich habe eine Klasse mit vielen Embedded-Assets.

Innerhalb der Klasse, würde Ich mag die Klassendefinition eines Vermögenswertes von Namen erhalten. Ich habe mit getDefinitionByName versucht () und auch ApplicationDomain.currentDomain.getDefinition (), aber weder Arbeit.

Beispiel:

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");
War es hilfreich?

Lösung

Das ist Ihre Frage nicht beantworten, aber es kann Ihr Problem lösen. Ich glaube, etwas zu tun, wie dies funktionieren soll:

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");

Ich habe eine harte Zeit erinnern, wenn Dirac-Notation auf versiegelte Klassen funktioniert. Wenn dies nicht der Fall, eine einfache Lösung ist es, die Klasse so dynamisch zu markieren.

Andere Tipps

Der Grund, Ihre Methode ist nicht funktioniert, weil "Image1Class" ist ein Variable Name, nicht der tatsächliche Klassenname .

Sie können die Klassennamen wie diese erhalten

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

Welche wie Sie sehen können, bedeutet, dass Ihr Klassennamen (die, die in die Funktion übergeben werden sollte) ist so etwas wie MyClass_Image1Class.

Sie brauchen keine Lust getDefinitionByName () verwenden Methoden, einfach darauf verweisen dynamisch. In Ihrem Fall ersetzt die ‚schlägt‘ Zeile mit:

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

Und das sollte es tun.

Vielen Dank! Ich verbrachte fast 5 Stunden versucht, die POS getDefinitionByName zu bekommen mit dem getQualifiedClassName zu arbeiten, war ich bereit, Sachen zu werfen !! Mein letzter Arbeits Code wie folgt aussieht und bekommt auch den Zeichenfolge Namen aus einem Array.

CreatureParam ist ein 2-dimensionales Array von Zeichenfolgen;

Typ ist eine ganze Zahl, die von HTML-Tags, die wiederum zu blinken gesendet wird aus einer MySQL-Datenbank über PHP kommt.

Mark1_cb ist eine Combobox, die auf der Bühne und hat einen Instanznamen. Es ist Ausgang ist auch eine ganze Zahl ist.

So dieser Code direkt unter der Klasse „BirdBodyColor_mc“ von einer externen swf „ArtLibrary.swf“ importiert. BirdBodyColor_mc ist ein Movieclip aus einem PNG-Bild erstellt. Beachten Sie auf dem Movieclip im ArtLibrary.fla klicken verdoppeln muss, und ein zweites Schlüsselbild einzufügen. Videoclips müssen offenbar zwei Frames oder Flash versucht, es als ein Sprite zu importieren und einen Typenkonflikt verursacht.

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

Normalerweise würde ich eine Instanz dieser Klasse Movieclip auf der Bühne setzen, indem Sie diesen Code verwenden.

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

var Definition: class = [ "BirdBodyColor_mc"] als Klasse; var Mark1: MovieClip- = new Definition ();

Aber ich brauche, dies zu tun mit einem Stringwert in meinem Array nachgeschlagen. So, hier ist der Code für das.

var Definition: class = [CreatureParam [Typ] [Mark1_cb + 2]] als Klasse; var Mark1: MovieClip- = new Definition ();

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top