Progressionにて外部SWFから素材の呼出しついて
コンパイル時間の短縮、デバッグのしやすさという点で
なるたけSWFを分けたく...
ユーザビリティ的な方向ではないですw
そんなMVCとかあんまわかってない僕が通ります。
親SWFで、SceneObjectをもち、
表示するものは、読み込んだ外部SWFから取り出して表示させるということをやってみます。
本当は子SWFが、親がもつSceneにSceneを追加していったりすればよいかもというところなんだけど、、、
ん~試行錯誤をちょっとしてみたがたが、
親に読み込まれている場合は、親と協調し、読み込まれていない場合は、単体テストができる
というような流れを考えたときに、ちょっとイイ感じにまとまらなかった....追調査
ということで、
+39さんのブログエントリー apeirophobia: progression検証 #2 シーンの階層化
にあるtaka:nium氏のコメント
ただ、ある程度開発しやすさを考慮した場合にはシーン構造自体は親が全て管理した方がオススメですね。
の、メッセージに後押しされ、
シーン構造は親で管理、見た目を部分は外部から取り出すというやりかたにして、やってみることにする。
基本的にはLoaderContext の指定と、getDefinitionByNameを用いるというおなじみのやり方で
外部SWFを読み込む→外部SWF内の素材を表示に入れるというProgression Sceneを作成。
外部SWFの読込みには LoadChild を使用する。
-
package {
-
-
import flash.display.Sprite;
-
import flash.net.*;
-
import flash.utils.*;
-
import flash.system.ApplicationDomain;
-
import flash.system.LoaderContext;
-
-
import jp.progression.casts.*;
-
import jp.progression.commands.*;
-
import jp.progression.events.*;
-
import jp.progression.loader.*;
-
import jp.progression.*;
-
import jp.progression.scenes.*;
-
-
public class MyLoadSWFScene extends SceneObject {
-
-
var swfHolder:Sprite;
-
-
public function MyLoadSWFScene() {
-
-
name = "loadSwfScene";
-
-
/*
-
* このSecenは親SWFのどこかで使われているScene
-
*/
-
-
}
-
-
protected override function _onLoad():void {
-
-
//読込用のSpriteを作成
-
swfHolder = new Sprite();
-
-
//LoadChildで読込
-
var o:LoadChild = new LoadChild(swfHolder, new URLRequest("externalSwfFile.swf"))
-
-
//LoadChild.context にLoaderContextを設定
-
var context:LoaderContext = new LoaderContext();
-
context.applicationDomain = ApplicationDomain.currentDomain;
-
o.context = context;
-
-
o.loader.onCastLoadStart = function():void {
-
this.addCommand(
-
new Trace( "onCastLoadStart" )
-
);
-
};
-
-
o.loader.onCastLoadComplete = function():void {
-
this.addCommand(
-
new Trace( "onCastLoadComplete" )
-
);
-
};
-
-
addCommand(
-
o
-
);
-
}
-
-
private var myAsset:CastSprite;
-
protected override function _onInit():void {
-
-
//getDefinitionByNameを用いて外部SWF内のClassを指定
-
//外部SWFの素材にはCastSpriteなどのClassを当てておきます
-
var Cl:Class = getDefinitionByName("externalSwfFile.swf が持つClassフルパスを文字列で指定") as Class;
-
myAsset = new Cl() as CastSprite;
-
-
addCommand(
-
new AddChild(progression.container, myAsset) // 表示に入れる
-
);
-
-
}
-
-
protected override function _onGoto():void {
-
addCommand(
-
new RemoveChild(progression.container, myAsset)
-
);
-
}
-
}
-
}
話しは戻るけれど、やはり
親との協調、単体テストのことを考えたり、
getDefinitionByName つかうのかぁ...と考えてみると、
なんとか子SWFで、Sceneと見た目モノ制御していきたいもの…;;
5月 18, 2009 at 12:00 AM




私をフォローしてください. @quqjp





