2011-08-03 66 views
4

我有一個字符串,它在運行時包含我想要實例化的類的名稱。我會怎麼做?從ActionScript 3中的字符串實例化一個類

我讀到建議使用flash.utils.getDefinitionByName()

var myClass:Class = getDefinitionByName("package.className") as Class; 
var myInstance:* = new myClass(); 

然而,這給了我以下錯誤:

[Fault] exception, information=ReferenceError: Error #1065: Variable className is not defined.

+2

你的類仍有待以使Flash獲得的定義別處定義,因爲它是所有檢查當前AP摺疊域。這是我現在掙扎並放棄的東西。 – shanethehat

回答

6

我已經拿出的是最簡單的方法來簡單地寫了出來的類名,用分號隔開,在你項目的任何地方。

例如我創建一個Assets.as本在它的文件:

這個
package { 

public class Assets {  

    // To avoid errors from the compiler when calling getDefinitionByName 
    // just list all of the classes that are not otherwise referenced in code: 
    Balloon; 
    Cloud; 
    FlyingHorse; 
    FlyingPig; 
    UFO; 
    Zeppelin;  
} 
} 

完整的代碼示例/教程是在這裏:http://producerism.com/blog/flashpunk-dame-and-lua-tutorial-part-6/

+0

謝謝!這解決了這個問題。我認爲只需導入類就足夠了 - 如果編譯器發現它是不必要的,導入的類是不是真正導入的? – Andy

+1

正確 - 僅僅因爲您導入類,並不意味着它在發佈時實際編譯。 Flash會檢查每個類的用法,並僅編譯它在實際代碼中找到的那些。這就是爲什麼你可以導入flash.display。*而不影響你的文件大小。 – producerism

相關問題