簡體   English   中英

在Flex / AS3中,如何使用getDefinitionByName獲取嵌入式資產的類定義

[英]In Flex/AS3, how do I get a class definition of an embedded asset with getDefinitionByName

我有一個包含許多嵌入式資產的課程。

在類中,我想按名稱獲取資產的類定義。 我嘗試過使用getDefinitionByName()和ApplicationDomain.currentDomain.getDefinition()但是都不行。

例:

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

這不能解答您的問題,但它可以解決您的問題。 我相信做這樣的事情應該有效:

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

我很難記住括號符號是否適用於密封類。 如果沒有,一個簡單的解決方案是將類標記為動態。

您的方法不起作用的原因是因為“Image1Class”是變量名稱,而不是實際的類名稱

你可以得到這樣的類名

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

您可能會看到,這意味着您的類名(應該傳遞給函數的類名)類似於MyClass_Image1Class

您不需要使用任何花哨的getDefinitionByName()方法,只需動態引用它。 在您的情況下,將'Fails'行替換為:

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

這應該做到這一點。

非常感謝! 我花了差不多5個小時試圖讓POS getDefinitionByName與我准備扔東西的getQualifiedClassName一起工作!! 我的最終工作代碼看起來像這樣,甚至從數組中獲取字符串名稱。

CreatureParam是一個2維的字符串數組;

Type是一個整數,通過HTML標簽發送到flash,該標簽通過PHP來自MYSQL數據庫。

Mark1_cb是一個組合框,位於舞台上並具有實例名稱。 它的輸出也是一個整數。

所以這個代碼直接在下面從外部swf“ArtLibrary.swf”導入類“BirdBodyColor_mc”。 BirdBodyColor_mc是從png圖像創建的動畫片段。 請注意,您必須雙擊ArtLibrary.fla中的動畫片段並插入第二個關鍵幀。 Movieclips顯然需要兩個幀或flash嘗試將其作為精靈導入並導致類型不匹配。

[Embed(source =“ArtLibrary.swf”,symbol =“BirdBodyColor_mc”)] var BirdBodyColor_mc:Class;

通常我會使用此代碼在舞台上放置此movieclip類的實例。

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

var定義:Class = this [“BirdBodyColor_mc”]作為Class; var Mark1:MovieClip = new Definition();

但我需要使用在我的數組中查找的字符串值來執行此操作。 所以這是代碼。

var定義:Class = this [CreatureParam [Type] [Mark1_cb + 2]] as Class; var Mark1:MovieClip = new Definition();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM