AS3でrootの参照が面倒なので一つクラスを作ってみた。
ついでにStageもSprite無しで参照できるように・・・・。
用途としては複数のSWFで構成されるプロジェクトで各子供のSWFでも単独動作させつつ開発を行いたい場合に使用。なんつーかネーミングがイマイチ。
(どっかのフレームワークに標準的に実装されていそうな気もするけど・・・)
package com.karatesystem {
import flash.display.MovieClip;
import flash.display.Stage;
public class Root
{
public static var ROOT:MovieClip;
public static var STG:Stage;
public static function isRoot(_r)
{
var _root = _r.root.parent.loaderInfo.url;
var _mine = _r.loaderInfo.url;
var _flg = _root == _mine
if (_flg)
{
ROOT = _r as MovieClip;
STG = ROOT.stage;
}
return _flg;
}
public static function get root():MovieClip
{
return ROOT;
}
public static function get stage():Stage
{
return STG;
}
public static function get rootUrl()
{
return ROOT.loaderInfo.url;
}
}
}
Usage
基本的にメインタイムラインに記述する形。
Stage周りに関してはこの中で色々拡張できるのかもしれないけど、まだ全貌が良くわからないので単純に参照のみ。(Stage系はscaleモード、alignモードに関連しての座標算出とか諸々あるだろうから、別に作った方が良いかな?)
import com.karatesystem.Root;
if (Root.isRoot(this)) {
trace("I m mother");
} else {
trace("I m Child");
}
trace(Root.root);
trace(Root.stage);
Root.root.i1.x=300;
trace(Root.stage.stageWidth);
おかしいところあったら御指摘くださいませ。
rootとstageの比較はこちら参考にしてます。サンキウ。
http://blog.graffiti-web.org/archives/2007/09/as3_1.html
余談
上条さんのブログには
Stage も DisplayObject のため root プロパティを持ちますが、これはメインの root を指しています。従って、任意の DisplayObject からは DisplayObject.stage.root のようにして、メインの root を参照することができます。
とあったのでこれを利用してroot同士を比較して検出しようとしたのだけど、上手くいかなかった。
追記:2008/01/06 17:50
キャッシュバスター系の制御のために”rootUrl”プロパティを追加してみた。
なんかクラスパスmisc系でパッケージにしたほうがいいかなぁ・・とか思い始めた・・・汗
「com.karatesystem.Root」への10件の返信
あれ?
何で改行されない?
むぉ・・・CSS難しい・・・汗
ご無沙汰してます。
ちょっと目的が違うかもしれませんが、似たようなの作ってます。
http://as3s.org/archives/2007/08/documentstage.html
ご参考まで。
御無沙汰してます。
あ、Documentクラスって名前良いですねwうちのもその名前に変更しても良いですか?w
というかそもそも
com.karatesystemというパッケージ名が長すぎる・・・。com.img8に変えようかしら・・・w
>あ、Documentクラスって名前良いですねwうちのもその名前に変更しても良いですか?w
どうぞ。w
>com.karatesystemというパッケージ名が長すぎる・・・。
わかります。他の人のライブラリ使う時に、謎のドメインだと落ち着かないなあと思ってたので、パッケージ名に使いたいという理由だけでas3s.orgというドメインとりました。w
>どうぞ。w
アリガトゴザイマスー。
>パッケージ名に使いたいという理由だけでas3s.orgというドメインとりました。w
そりはすごい。
ちなみにas3sの最後の”s”は複数形の”s”ですか?
オデもパッケージ”img8″に全部変えることにしました。
> ちなみにas3sの最後の”s”は複数形の”s”ですか?
as3が取れなかっただけで深い意味はありません。。が、あえて言えば AS3 SOURCES の略ってことにしてます。。
>が、あえて言えば AS3 SOURCES の略ってことにしてます。。
as3.orgって仮押さえされてるんですね・・ここから購入とか出来たとしても高いんでしょうねえ・・・。
ドメインブローカーとかうっとおしいっすね。
これ、色々不具合あったので一度保留状態にします。
最新こっちに展開しました。
http://blog.img8.com/archives/2008/03/003678.html
どうまとめればスマートなのかようわからんちん。
クラスだけ別ブログにした方がええんやろか?