子 swf からの stage 参照
2007/08/20 21:14 - AS3.0
自分としては必要性があるかどうかまだ分からないんですが、ちょっと気が向いたので、ActionScript 3.0 の鬼門とも呼べる Stage 参照について、他人様の褌で相撲を取ってみました。
このエントリーでは sub.swf を単独で呼び出したときと、その sub.swf を parent.swf から Loader で呼び出したときのふたつのサンプルを掲示します。
なお、各 swf を作成するにあたってのコーディングスタイルは、fla のドキュメントクラス欄に、外部ドキュメントクラスの名称を記入するスタイルを採用しました。
さっそくサンプルの掲示。
sub.swf を単独で呼び出す
parent.swf から sub.swf を呼び出す
- stage.zip(1.51 KB)
見てのとおり、プロパティのサイズの部分で、sub.fla は 200×80、parent.fla は 240×120 にそれぞれ設定してあります。
そして各ドキュメントクラスの設計ですが、冒頭に他人様の褌で云々と書いたとおり、「AS3 で stageを参照する場合の注意点(by fladdict.net blog)」で解説されている以下の手法を使いました。
sub.as においては、本来コンストラクタがおこなうべきことを init 関数へ委譲しています。コンストラクタでおこなっているのは以下のことだけです。
で、init 関数で stage 参照をおこなうコードを記述しています。
if ( this.stage != null ) { init( this.stage ); }
parent.as は LiveDocs にある LoaderExample を流用しました。
Event.COMPLETE のハンドラの部分に、子 swf の init 関数を呼び出すコードを追加しています。
private function completeHandler( e:Event ):void { e.target.loader.content["init"]( stage ); }
こうすれば fladdict.net blog さんのエントリーにあるように、sub.swf を単独で呼び出しても外部から呼び出しても、正常に作動するわけですね。