Home > Flash > progression Archive
progression Archive
SceneObjectから子swfでLinkageしてるクラスをnewする
- 2009年3月 9日 12:18
- progression
最近は、Progressionでお願いします。と、
はじめから言われる事もあるような今日この頃ですが、
あるシーンで、子swfを読み込んで、その子swfにリンケージしてあるクラスをnewしようとして、
少しはまったので、メモ。
はじめは、
何となく_onLoadの中でaddCommandでコマンド処理走らせればいけるだろーとやんわり思ってました。
こんな感じ。
protected override function _onLoad():void {
_container = CastSprite(progression.container.getChildByName("contentsContainer"));
var page:ContentsPage=newContentsPage(_name);
addCommand(
new AddChild(_container,page),
new LoadChild(page, new URLRequest("child.swf")),
new AddChild(page, new ChildLinkagedClass())
)
}
するとハァ━(-д-;)━ァ...
何も表示されません、、、
よくよく考えると当然で、
new ChildLinkagedClass()のコンストラクタが実行されるときには、まだ、子swfは読み込まれておらず、
currentのApplicationDomainに子swfにリンケージされたクラスがない、ってことです、、、よね?
とういわけで、
この流れの中で処理するためには、
new AddChild(page,new ChildLinkagedClass())コマンドをswfが読み込まれた後に、実行、というか、
execute()するという意味ではなく、newする必要があります。
というわけで、
こんな感じにするとうまく行きました。
実際に、Commandが作られる時を意識しておかないと、実際execute()される時の事だけ考えると少し混乱しますね。
protected override function _onLoad():void {
_container = CastSprite(progression.container.getChildByName("contentsContainer"));
var page:ContentsPage=newContentsPage(_name);
addCommand(
new AddChild(_container,page),
new LoadChild(page, new URLRequest("child.swf")),
new Func(function():void
insertCommand(
new AddChild(page, new ChildLinkagedClass())
)
)
)
}