AS3S.ORG

ACTIONSCRIPT 3.0 SOURCES

汎用Documentクラス(Stageの参照)

ドキュメントクラス用の汎用クラスを公開しました。

org.as3s.Document

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では静的クラスにはアクセスできないので有効に使える場面は多いのではないかと思います。

(追記)2007-08-16
(Ver1.01)複数の外部ファイルを同時にロードした際のスタックがコンフリクトする不具合、その他一部の不具合を修正しました。

尚、stage自体を参照したい場合はDocument.stageで参照できます。(ロード元SWFにもこのDocumentクラスを利用していれば、ロードされるSWFのドキュメントクラスのコンストラクタでもDocument.stageはnullになりません。)

Written by admin

August 16th, 2007 at 1:17 am

Posted in Document

Leave a Reply