ステージの参照とシングルトン #1
October 8, 2007
話として古いけれどfladdict.net blog『AS3 で stageを参照する場合の注意点』に紹介があるように、ステージを参照するとき注意が必要になる。
その解決策として、『[AS3] stageとrootを参照する方法(blog.nium.jp)』にデザインパターンのシングルトンを利用した解決法がある。
シングルトンを覚えたいのもあり、ステージ参照の復習と含め、試し。
ステージ参照にどんな注意点があるかの試し①
ドキュメントクラスMainに、ステージを参照するTestクラスをインスタンス化し、addChild、removeChild前後でどう結果が変わるかを試してみる。
Main.as
var test:Test = new Test();
//test.init();// Error #1009
addChild(test);
test.init();
removeChild(test);
//test.init();// Error #1009
Test.as
public function init():void
{
trace(stage.stageWidth,stage.stageHeight);
}
addChildより前、removeChildの後、つまり表示リストから外れたときにTestクラスからステージを参照すると、『TypeError: Error #1009: null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません。』になる。
ステージ参照にどんな注意点があるかの試し②
次に、Test.asにステージリサイズイベントを設定してみる。
testがMain.asでremoveChildされた後にステージをリサイズした時に、ステージを参照するとエラー(#1009)が出る。
ただし、ステージリサイズ時のイベント処理で、ステージを参照しなければエラーは出ない。
Test.as
public function init():void
{
// ステージリサイズイベント追加
stage.addEventListener(Event.RESIZE,stageResize);
// ステージサイズ出力
trace(stage.stageWidth,stage.stageHeight);
}
// ステージリサイズ時の処理
private function stageResize(e:Event):void
{
trace("ステージを参照しなければエラーなし");
//trace(stage.stageWidth,stage.stageHeight);// Error #1009
}
リサイズ時、ステージ参照が必要な場合はtestをremoveChildするタイミングでステージリサイズイベントを削除しておかないとエラーが発生してしまう。
ということで、『AS3 で stageを参照する場合の注意点(fladdict.net blog)』ではStageReferenceクラスを作成し、ステージサイズを管理している。と、ここまでは理解可能。
ここまでを前置きとして、次回はシングルトンを使ってステージ参照を解決する方法を試してみる。
カテゴリー:
Trackback
Trackback URL for this entry:

















