22.ApplicationDomainクラスを使う2

asファイルを分ける

FLASH-JAPANのフォーラムで頂いた回答を参考にし、いろいろ考えた結果、外部swfファイルを作成する元となるasファイルを二つに分けることにしました。

例えば、Greeter_class.asとGreeter.asという感じにし、Greeter_class.asは下のようにただの「お飾り」みたいなものです。

//Greeter_class.as
package {
import flash.display.Sprite;
public class Greeter_class extends Sprite {
public var xxx:Greeter;
public function Greeter_class(){
}
}
}

上の部分はたいして中身はなく、肝心の部分は以下のような感じで。

//Greeter.as
package {
import flash.display.Sprite;
import flash.text.TextField;

public class Greeter {
private var greeting:String;

public function Greeter() {
greeting = "Hello World";
}
public function greet():String {
return greeting;
}
}
}

こちら側にクラスの肝心のプロパティやメソッドを記述してます。

この二つのasファイルを用意して、Greeter_class.asをコンパイルします。

するとGreeter_class.swfができますので、これを読み込むことになります。

読み込んだswfファイル内のクラスからオブジェクトを作成

この読み込む部分がちょっと面倒だったりします。とりあえず、最低限動作するコードが以下のような感じ。

var loader:Loader = new Loader();
var request:URLRequest = new URLRequest("Greeter_class.swf");

var context:LoaderContext = new LoaderContext();
context.applicationDomain = ApplicationDomain.currentDomain;
loader.load(request , context);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);

function completeHandler(event:Event):void {
var myGreeterClassRef:Class = loader.contentLoaderInfo.applicationDomain.getDefinition("Greeter") as Class;
var myGreeter:Object = new myGreeterClassRef();
}

completeHandler内の var myGreeter:Object = new myGreeterClassRef(); のオブジェクトを作るところまで来れば後は従来と同じですね。

実際にはキャッシュ対策とか、ファイル読み込み失敗時の処理とか必要なんでしょうけど、とりあえずこれで外部swfファイルにあるクラスからのオブジェクト作成はOK!

→23.XMLではまった!

22.ApplicationDomainクラスを使う1←