Archive for the ‘Document’ Category
汎用Documentクラス(Stageの参照)
ドキュメントクラス用の汎用クラスを公開しました。
AS3では、Stageについての仕様が変更され、
Stage.scaleMode = “noScale”;
のように静的クラスに直接アクセスすることはできなくなりました。
Stageのプロパティやメソッドにアクセスするには、
mc.stage.scaleMode = “noScale”;
のように、ステージ上に配置されたDisplayObject(MovieClipやSpriteなど)のstageプロパティからアクセスする必要があります。
ただし、stageが参照できるのはあくまでステージ上に配置されている時のみで、そのDisplayObjectがStage上にaddChildされる前、またはremoveChildされた後では、stageプロパティはnullとなってしまいます。
タイミングを気にせずにStageを参照する方法としては、はじめからステージ上に配置されているドキュメントクラスのstageプロパティを参照する方法が考えられますが、この方法でも別のSWFファイルに外部ファイルとしてロードされた場合に、ロードが完了するまでstageプロパティがnullになるという問題があり、汎用的とは言えません。
これらの問題に対処するために、ドキュメントクラス用の抽象クラスを作成しました。
ドキュメントクラスにこのDocumentクラスを継承させるだけで、ドキュメントクラスのコンストラクタを含むどこからでも、
Document.scaleMode = StageScaleMode.NO_SCALE;
Document.align = StageAlign.TOP_LEFT;
Document.addEventListener(Event.RESIZE, onResize);
Document.addEventListener(KeyboardEvent.KEY_DOWN, onKeyboadDown);
Document.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
のように、Stageプロパティを設定・取得したり、Stageイベントを受け取ることができます。
基本的な仕組みとしては、stageプロパティに橋渡しをするだけですが、addToStageされる前(stageがnullの間)に設定されたプロパティやイベントリスナーを一時的にスタックしておき、addToStageされたタイミングでスタックされたプロパティやイベントリスナーを設定します。
スタックが発生するのは外部ファイルとしてロードされた時だけだと思われますが、そのような場合も含めて、コンストラクタだろうとタイミングを気にせずに使えます。
Stageイベントだけでなく、KeyイベントやMouseイベントもAS3では静的クラスにはアクセスできないので有効に使える場面は多いのではないかと思います。