- 2008-12-09 (火) 11:43
- Progression
Progression を使っていると、”root” が一体何を指しているのかに戸惑います。ました。一回覚えればいいのでメモしておきます。
事前知識
このエントリでは、あるクラスで設定した変数に、他のクラスからアクセスするケースを紹介します。なので、変数を設定する際には外からでも見えるように public に設定されているか、あるいは getter/setter を使って明示的にアクセス権を設定してあるものとします。getter/setter って、_hoge という private な変数に下のようなアクセス設定をするやつです。こうしておけば外のクラスから hoge という変数のように扱えるってやつです。
public function get hoge():String{ return _hoge; }
public function set hoge(value:String):void {
_hoge = value;
}
Index.as 上の変数にアクセス
fla 上で「ドキュメントクラス」として設定している Index.as クラス上で設定した変数 hoge にアクセスしたい時。つまり従来の Flash の概念における root にアクセスしたい>時は「CastDocument.root」を使う。さらに、AS3 では外部クラスから別のクラスの値にアクセスする時はキャスト(型を明示的に宣言しておく)する必要がある。
つまり、外部のあるクラスから Index.as 上の変数 hoge にアクセスするには:
trace(Index(CastDocument.root).hoge); //hoge の値が出力される
IndexScene.as 上の変数にアクセス
Progression のシーン構造における起点となる「”Index”シーン」は IndexScene.as です。Progression 的にはここが起点、つまり「root」的な扱いにされています。この IndexScene.as クラス上で設定した変数 foo に外部クラスからアクセスしたい時は:
trace(IndexScene(progression.root).foo); //foo の値が出力される
注意点は”root”も Index.as ではなく、IndexScene.as を指すように予め Progression 側で設定されているということ。つまり以下の記述でも同様にIndexScene の変数にアクセスできる。
trace(IndexScene(root).foo); //foo の値が出力される
なので、IndexScene.as に設定した変数やインスタンスにアクセスするには上の 2通りのアプローチがあるので好きな方を使えばいいっぽい。(他にもあったら教えてください。)
僕のつまづきかた
FlashDevelop にはコード補完機能があり、”Index(instance)”とキャストして直後にドットをタイプすると、Index.as に設定されている変数やメソッドがズラーっと候補でリストアップされます。でも
Index(root).hoge
は上のメモをご覧のとおり、root は IndexScene を指すので、パブリッシュ時にエラーになります。補完候補にリストされているのに hoge なんてないよと怒られて途方に暮れたのでした。
Progression ノウハウ
xml読み込みはIndexSceneのonLoadでやる。ロード待ちはFuncのdispatcherなどなど使って待機させるように。ってのがむらけんさんノウハウ。どっちみち IndexScene は通るわけだから、僕もできる限りは Index.as はシンプルにしておき、IndexScene.as 側でやるようにしたい。
とはいえ、僕の Progression デビュー作は Index.as で xml ロードしてたりするけど。。
ただし、Google Analytics Tracking for Adobe Flash を使おうとすると、IndexScene.as よりも Index.as 上にトラッキング用インスタンスを作ってやる方がよさそう(IndexScene は DisplayObject じゃないから生成できないと怒られる)。
さらに、Analytics デバッグ確認用のコンポーネントは通常は最上位層に配置される仕様になっているのだけど、Progression の表示階層の管理は Flash のそれとはちょっと別世界なので、Analytics パネルが最下層に来てしまう。これを一番上にもってくる方法はまだ見つけられていないので、とりあえず Progression のコンテナ全体を y座標を下げたりして対応してますw。
※Google Analytics Tracking for Adobe Flash は、どのページにアクセスしたかを swf 上でデバッグ確認できる用のパネルがデデーンと表示されるのです。これは別エントリで。
- Newer: FlashDevelop で swc ファイルの中身が確認できることを確認
- Older: Flash コンテンツのアクセス解析ni「Google Analytics Tracking for Adobe Flash」
Comments:4
- kawamura 08-12-09 (火) 16:10
-
みんながどんな書き方しているのか
気になっていたので参考になります。自分の場合、Index や IndexScene であれば、
static 変数、メソッドでアクセスしちゃってます。たとえば、
他のクラスから Index.as の hoge って変数にアクセスしたい場合、import myproject.Index ;
trace( Index.hoge )というか、as3 になって root は一切使わなくなりました。
みんな多用しているのでしょうか・・・
そろそろ「動けばいい」から脱却しないとマズイですね。
勉強して出直します。。汗 - tera 08-12-09 (火) 18:00
-
>kawamuraさま
コメントありがとうございます。
ええっ!そんなことできたんですか!?
と思ってやってみました。動きました。感動しました。
目からウロコ!別エントリにまとめます。
どうもありがとうございました!!!
「動けばいい」にズッポリなのは僕の方です。スイマセン。 - taka:nium 08-12-10 (水) 5:37
-
> そろそろ「動けばいい」から脱却しないとマズイですね。
動けばいいというスタンスでも、カッチリとしたものができるようにする事が Progression のミッションなので、どんどん苦情言ったらいいと思います!> Analytics パネルが最下層に来てしまう。
ver 3.1 では Google Analytics Tracking for Adobe Flash を標準同梱させるので、その辺も対応しますー。
ということで、来週辺りにいろいろ聞かせてください! - tera 08-12-10 (水) 8:31
-
>takaさん
どうもありがとうございます。
僕のスパゲティなコードでもProgressionに乗っかって作ればある程度はレビューしやすくなって、それだけでありがたい限りです。
全てはAS2の知識だけでAS3をやりくりしている僕側が原因です。>ver 3.1 では Google Analytics Tracking for Adobe Flash を標準同梱させる
まじですか!!対応すごい!そこに痺れる、憧れるっ!!
Trackbacks:2
- Trackback URL for this entry
- http://www.trick7.com/blog/2008/12/09-114334.php/trackback
- Listed below are links to weblogs that reference
- Progression を使った時の root について from trick7
- pingback from kanariia.com blog - [progression勉強]実制作でつまづいたとこをQ&A形式でまとめてみた 09-04-28 (火) 15:26
-
[...] trick7さんの記事を参考に! http://www.trick7.com/blog/2008/12/09-114334.php [...]
- pingback from 【progression】stageにリスナーを登録する方法 | flazac.blog 09-07-22 (水) 10:33
-
[...] ネットで調べてるとtrick7さんのこのページを見て解決。 [...]






![Flash Math & Physics Design:ActionScript 3.0による数学・物理学表現[入門編]](http://ecx.images-amazon.com/images/I/617sNhK9P9L._SL75_.jpg)


![FLASH ActionScript 2.0入門完全ガイド+実践サンプル集 [CD-ROM付]](http://ecx.images-amazon.com/images/I/51915J1BG6L._SL75_.jpg)


