2011-08-03 4 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

plicationドメイン。これは私が苦労して今までにあきらめたことです。 – shanethehat

答えて

6

私が作ってみた最も簡単な方法は、単純にクラス名を記述することですプロジェクト内のどこにでもセミコロンで区切られています。

ここで、この上

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

ありがとう!これは問題を解決しました。私はクラスを 'import'するだけで十分だと思っていました。 – Andy

+1

正しい - クラスをインポートしただけであるため、実際にパブリッシュするときにクラスが実際にコンパイルされたわけではありません。 Flashは各クラスの使用状況をチェックし、実際のコードで見つかったクラスのみをコンパイルします。そのため、あなたのファイルサイズに影響を与えずにimport flash.display。*を行うことができます。 – producerism

1

他のオプションは、このようなmxmlcの-includesコンパイラー引数を使用することです:私はAssets.asそれでこれを使用してファイルを作成します

-includes=com.mydomain.package.MyClass 

http://blogs.adobe.com/cantrell/archives/2010/09/loading-classes-dynamically-in-actionscript-3.html

あなたのクラスはまだそれがないすべてが現在のAPをチェックしているので、定義を取得するにはFlash用のために、他の場所で定義する必要があります
+0

これは、Flash Builderのみのようだと付け加えたいと思います。 – BladePoint

関連する問題