« ACDSeeの不具合 | Home | flashVarsのJSON化 »

Jan 062008

com.karatesystem.Root

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系でパッケージにしたほうがいいかなぁ・・とか思い始めた・・・汗

10 Comments

あれ?
何で改行されない?

むぉ・・・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
どうまとめればスマートなのかようわからんちん。
クラスだけ別ブログにした方がええんやろか?

Leave a comment

Search and Archives