フラッシュ初心者かつ、おばかさんのたわ言です。
なんとな~く理解できたかなぁと思って、自分で「こんな感じの作りたいな~」と、公開されてるコードとか弄ったりなんだりして、自分がイマイチ理解できていないことが、表題の二つ。絶対に何かしてて引っかかるのはこの二つ。
未だに課題だな~と思います。
パスは2種類。相対パスと絶対パス。
A┬B-D
└C-E
として。Eはどこにあるのかっつう話です。ツリー構造とかそう言う類の話かと。
フォルダ的解釈でいけば
A:\C\E
分かりにくいか@w@;
マイドキュメント(A):\マイピクチャー(C)\E(フォルダ)
こんな階層表示ないか・・・まぁそんな感じで。自分さえ分かればイイヤ。
HTML的な見方だと
A/C/E が絶対パス
Dから見たEの相対パスは
../../C/E
親二つ上まで上がって、あとは下りて行くだけ。
基本的には、ASでも同じ・・・なんだけどねぇ。区切りが\や/(スラッシュ)じゃなくて.(ピリオド)ってだけ。
絶対パス _root.C_mc.E_mc ってとこか。
相対パス this._parent._parent.C_mc.E_mc かな?
*AS上で指定する際、シンボル名とは別にインスタンス名が必要。種類を区分するための接尾辞(_mc)を追記。
_parent は 分かるんだよね。厄介なのはthisと言うやつかなぁ。見慣れないせいもあるんだと思うけど。
thisは、「自分自身」を指し示すので、この場合this=Dと言うことなんですが。
なので
D=this
Dの親=C
Dの親の親=A
(Dの親の親=_root)
DからEを参照するには、分岐してるAまで戻ればいいので、これの親の親(this._parent._parent)で遡る指示をして、その後に、子供の名前を指定していく。
こう言うと家系図っすなぁ。
自分から見て、兄弟は誰の子供か。従兄弟は誰の子供かを説明するような感じが相対パス。自分からじゃなく、爺さんから見て誰の子供の子供なのか指定していくのが絶対パス。
祖父┬父-私
└叔父-いとこ
_root上に別のムービークリップがあって、そっちの指定をするとなると・・・曽祖父の登場か@w@;
私がよく引っかかる理由は、この辺の概念をきちんと理解していない事と、フレームスクリプトを多用すること。
そして、「ターゲットパスを挿入」っつう便利なのか不便なのか分からないシステムを利用してたこと。
フレームにスクリプトを書くのは、各インスタンスに直書きしてると、後々どこに何を書いたかわからなくなりそうだったので、別ファイルにする的感覚で利用していた。
この時、クリップして置けば問題はないんだが、選択しているのはフレーム。オブジェクトそのものを選択していないので、「ターゲットパスを挿入」しようとすると、出てくるのは、_rootを基準にした相対パス。
これをそのまま使っていたので、最初全然動作せずに「なんだこれ?」となっていた。
次に引っかかったのは、ステージ上のオブジェクトとAS上で作ったステージには存在しないオブジェクト。
ステージ上のオブジェクトA_mcに対して、フレームASで
var nNum:Number;
A_mc.nNum = 10;
trace(A_mc.nNum + 10);
こんなことすんのか分からないけど、どっかでこんなコードがあったかな。出力結果は20.
この場合、thisはあってもなくても結果は同じだが、this.nNumにするとNaN(非数)値が返ってくる。_root上に別のムービークリップがあってもなくてもそうなる。
しかし、下記のようにするとthis.nNumでOK。
A_mc.onRelease = function(){
trace(this.nNum + 10);
}
これで、A_mcを押した時に、A_mcの~と指定されたので、その{}内でthis=A_mcになり、きちんと20と言う数値を返してくる。
AをBやCに書き換えて、やる時は、this.A_mc.B_mc.onRelease = うんぬんでいける。
onRelease前の、thisはフレームASに記述している場合、_rootに差し替えても動作するが、他のフラッシュに呼び出したとき、_rootの基準が変わるので、ロックして対応か、相対パスに書き換えねばならない。
単純になくても動いた((((’
最初に記述した方でも、thisがいらない理由もよくわからんのですが・・・。
とりあえずわかってる範囲で今日はお終い。配列も後回し~><
なんとな~く理解できたかなぁと思って、自分で「こんな感じの作りたいな~」と、公開されてるコードとか弄ったりなんだりして、自分がイマイチ理解できていないことが、表題の二つ。絶対に何かしてて引っかかるのはこの二つ。
未だに課題だな~と思います。
パスは2種類。相対パスと絶対パス。
A┬B-D
└C-E
として。Eはどこにあるのかっつう話です。ツリー構造とかそう言う類の話かと。
フォルダ的解釈でいけば
A:\C\E
分かりにくいか@w@;
マイドキュメント(A):\マイピクチャー(C)\E(フォルダ)
こんな階層表示ないか・・・まぁそんな感じで。自分さえ分かればイイヤ。
HTML的な見方だと
A/C/E が絶対パス
Dから見たEの相対パスは
../../C/E
親二つ上まで上がって、あとは下りて行くだけ。
基本的には、ASでも同じ・・・なんだけどねぇ。区切りが\や/(スラッシュ)じゃなくて.(ピリオド)ってだけ。
絶対パス _root.C_mc.E_mc ってとこか。
相対パス this._parent._parent.C_mc.E_mc かな?
*AS上で指定する際、シンボル名とは別にインスタンス名が必要。種類を区分するための接尾辞(_mc)を追記。
_parent は 分かるんだよね。厄介なのはthisと言うやつかなぁ。見慣れないせいもあるんだと思うけど。
thisは、「自分自身」を指し示すので、この場合this=Dと言うことなんですが。
なので
D=this
Dの親=C
Dの親の親=A
(Dの親の親=_root)
DからEを参照するには、分岐してるAまで戻ればいいので、これの親の親(this._parent._parent)で遡る指示をして、その後に、子供の名前を指定していく。
こう言うと家系図っすなぁ。
自分から見て、兄弟は誰の子供か。従兄弟は誰の子供かを説明するような感じが相対パス。自分からじゃなく、爺さんから見て誰の子供の子供なのか指定していくのが絶対パス。
祖父┬父-私
└叔父-いとこ
_root上に別のムービークリップがあって、そっちの指定をするとなると・・・曽祖父の登場か@w@;
私がよく引っかかる理由は、この辺の概念をきちんと理解していない事と、フレームスクリプトを多用すること。
そして、「ターゲットパスを挿入」っつう便利なのか不便なのか分からないシステムを利用してたこと。
フレームにスクリプトを書くのは、各インスタンスに直書きしてると、後々どこに何を書いたかわからなくなりそうだったので、別ファイルにする的感覚で利用していた。
この時、クリップして置けば問題はないんだが、選択しているのはフレーム。オブジェクトそのものを選択していないので、「ターゲットパスを挿入」しようとすると、出てくるのは、_rootを基準にした相対パス。
これをそのまま使っていたので、最初全然動作せずに「なんだこれ?」となっていた。
次に引っかかったのは、ステージ上のオブジェクトとAS上で作ったステージには存在しないオブジェクト。
ステージ上のオブジェクトA_mcに対して、フレームASで
var nNum:Number;
A_mc.nNum = 10;
trace(A_mc.nNum + 10);
こんなことすんのか分からないけど、どっかでこんなコードがあったかな。出力結果は20.
この場合、thisはあってもなくても結果は同じだが、this.nNumにするとNaN(非数)値が返ってくる。_root上に別のムービークリップがあってもなくてもそうなる。
しかし、下記のようにするとthis.nNumでOK。
A_mc.onRelease = function(){
trace(this.nNum + 10);
}
これで、A_mcを押した時に、A_mcの~と指定されたので、その{}内でthis=A_mcになり、きちんと20と言う数値を返してくる。
AをBやCに書き換えて、やる時は、this.A_mc.B_mc.onRelease = うんぬんでいける。
onRelease前の、thisはフレームASに記述している場合、_rootに差し替えても動作するが、他のフラッシュに呼び出したとき、_rootの基準が変わるので、ロックして対応か、相対パスに書き換えねばならない。
単純になくても動いた((((’
最初に記述した方でも、thisがいらない理由もよくわからんのですが・・・。
とりあえずわかってる範囲で今日はお終い。配列も後回し~><