リンケージで外部 swf からクラスを呼び出し
必要に迫られて、方法を調べてみました。
以下、 ActionScript3/Flash CS3 で検証しています。
Step1. ActionScript でクラスを定義する
まず、呼び出し元のクラスを作成します。
ここでは、以下のような MyTree クラスを MyTree.as 内で定義しました。
package { import flash.display.MovieClip; public class MyTree extends MovieClip { public function MyTree() { trace("success!"); } } }
読み込みの成否だけを気にしているので、最低限の実装です。衝突を防ぐため、パッケージに名前を与えてもいいと思います。
また、次のステップでシンボルとリンクさせる都合、 MovieClip クラスを継承しています。
Step2. リンケージを作る
適当なプロジェクトを作成します。ここでは、 test.fla を作成しました。
作成したファイルに矩形ツールなどで絵を描いて、シンボルに変換します。図形の上で右クリックして、『シンボルに変換』です。ここでは、名称は適当で構いません。
これが終わったら、ツールバーの『ウインドウ』から『ライブラリ』を開きます。先ほど作ったシンボルが登録されているはずなので、リストから探して右クリックし、『リンケージ』を選択します。『ActionScript に書き出し』にチェックを入れ、クラス名に先ほど作った MyTree を、基本クラスに MovieClip を、それぞれ選択します。
ここまで完了したら、 .fla ファイルを .swf に書き出しておきます。
Step3. 別のプロジェクトから swf のクラスをロードする
test2.fla というプロジェクトを新規に作成し、『アクション』ウインドウを開きます。以下のコードを打ち込んで書き出しを行うと、確かに先ほど作ったシンボルが表示され、コンソールへの "success!" の出力も行われるはずです。
var MyTree:Class; var treeLoader:Loader = new Loader(); var treeRequest:URLRequest = new URLRequest("test.swf"); treeLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, drawTree); treeLoader.load(treeRequest); function drawTree(event:Event):void { MyTree = treeLoader.contentLoaderInfo.applicationDomain.getDefinition("MyTree") as Class; var mc:MovieClip = new MyTree(); addChild(mc); }