[英]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.