Progression を使った時の root について

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 上でデバッグ確認できる用のパネルがデデーンと表示されるのです。これは別エントリで。

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 を標準同梱させる
まじですか!!対応すごい!そこに痺れる、憧れるっ!!

Comment Form
Remember personal info

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さんのこのページを見て解決。 [...]

AS3習得本
AS3の全容を学習できる本。この中でどれか1冊自分に合ったものを。
Adobe Flash CS4 詳細!ActionScript3.0入門ノート ActionScript3.0 プロフェッショナルガイド 初めてのActionScript 3.0 Flashユーザーのためのステップアップガイド 詳説 ActionScript 3.0 Actionscript 3.0 Cookbook
AS3発展本
ASでアニメーションさせる面白さを知るための本。
Flash Math & Physics Design:ActionScript 3.0による数学・物理学表現[入門編] ActionScript 3.0 アニメーション AdvancED ActionScript 3.0 Animation (Advanced)
AS2
"Flash"ではなく"ActionScript2.0"学習のための良著。他にもいろいろ読んだけど、この4冊を読んだ後、自分が成長できた感じがしました。
FLASH ActionScript 2.0入門完全ガイド+実践サンプル集 [CD-ROM付] Essential Actionscript 2.0 Flash 8 Essentials Foundation Actionscript Animation: Making Things Move (Foundation)

あわせて読みたいブログパーツ

Return to page top