- ベストアンサー
Flash初心者のための引数の渡し方
- Flash初心者の方にとって、引数の渡し方は少し難しいことかもしれません。今回は、rootから数えて4階層下のムービークリップ「hit_area」から、2階層上のフレームラベル「damage」の最初のフレームのムービークリップへ引数を渡す方法を探っています。同様の引数渡しはできたものの、うまくいかない部分があるようです。どのようにすれば解決できるのか、教えていただきたいとのことです。
- Flash初心者の方が引数を渡す方法について困っているようです。具体的には、rootから数えて4階層下のムービークリップ「hit_area」から2階層上のフレームラベル「damage」の最初のフレームのムービークリップへ引数を渡したいとのことです。同じような引数の渡し方は他の箇所でできているが、この部分だけがうまくいかないようです。どのようにすれば問題が解決するのか、アドバイスを求めています。
- Flash初心者の方が引数の渡し方について質問しています。具体的には、rootから数えて4階層下のムービークリップ「hit_area」と、その下の1階層下にある「attack_hit」という関数へ引数を渡したいとのことです。同じような処理は他の箇所でできているが、この部分だけがうまくいかないようです。問題を理解してもらうために具体的なスクリプトも記載されています。どのようにすれば解決するのか、アドバイスをお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
#1です。 一応書かれていらっしゃるような階層構造を作成しました。 そして, stand_mc の フレーム1 には次のように書き, ------------------------------ function attack_hit(AAA) { trace(this); trace(AAA); } ------------------------------ damage_mc の フレーム1 にも同じく次のように書き, ------------------------------ function attack_hit(AAA) { trace(this); trace(AAA); } ------------------------------ hit_area の フレーム1 には次のように書いて, ------------------------------------------ this.onEnterFrame = function() { _parent._parent.stand_mc.attack_hit(this); _parent._parent.damage_mc.attack_hit(this); delete this.onEnterFrame; }; ------------------------------------------ 「制御」→「ムービープレビュー」してみた結果, 一応次の値が出力されました。 出力結果↓ ////////////////////////////////////// _level0.char1.char.stand_mc _level0.char1.char.attack_mc.hit_area _level0.char1.char.damage_mc _level0.char1.char.attack_mc.hit_area ////////////////////////////////////// パスは合っているようですよ。 ただ, hit_area の フレーム1 に this.onEnterFrame = function() を除いて, _parent._parent.stand_mc.attack_hit(this); _parent._parent.damage_mc.attack_hit(this); だけを書いた場合は何も実行されませんでした。 この2行のスクリプトを 今度はフレーム2に移動させれば実行されました。 つまりパスは合っているのですが, stand_mc と hit_area に function attack_hit が定義されるタイミングが, hit_area のフレームで実行される attack_hit(this); より遅くなるようです。 この時間差をなんとかすれば(上の場合 onEnterFrame でずらす), うまく行くと思います。
その他の回答 (1)
- BlurFiltan
- ベストアンサー率91% (1611/1754)
ご質問から階層構造を考えると次のようになります。 _root └ムービークリップ 「?1」 - attack_hit ○ └ムービークリップ 「?2」 ├ムービークリップ 「?3」 - attack_hit × └ムービークリップ 「?3’」 └ムービークリップ 「hit_area」 さらに, > ムービークリップ(インスタンス名は付けてません)の > 1階層下の「attack_hit」という関数に引数として渡したいのです。 ということですから, 相対パス自体は次のようになります。 _parent._parent.damage.attack_hit(this); ↓変更↓ _parent._parent.ムービークリップ 「?3」.attack_hit(this); 少なくとも, ムービークリップ 「?3」 にはインスタンス名が必要ですね。 それと, ↓階層 ↓階層 ↓フレームラベル _parent._parent.damage. このような勝手なルールは最初から通じません。 あえて似たようなことをするのでしたら, _parent._parent.ムービークリップ 「?3」.gotoAndStop("damage"); _parent._parent.ムービークリップ 「?3」.attack_hit(this); となります。 その時に存在しないオブジェクトになど命令はできません。 関数も,それ以前に定義されていないと実行できません。
お礼
丁寧なご回答ありがとうございました。 若干伝わりきれなかった部分があったためか、うまくいきませんでした。
補足
補足と整理をさせて頂きます。 ご回答の通り、ムービークリップに名前を付け、整理したところ… _root └ムービークリップ「char1」 └ムービークリップ「char」 ├ムービークリップ「stand_mc」ラベル「stand」(フレーム1) ├ムービークリップ「damage_mc」ラベル「damage」 └ムービークリップ「attack_mc」ラベル「attack」 └ムービークリップ「hit_area」 となりました。 質問の後に試した場合も入れ、質問の時の例に当てはめると… _root └ムービークリップ「char1」― attack_hit ○ └ムービークリップ「char」― attack_hit ○ ├ムービークリップ「stand_mc」― attack_hit × ├ムービークリップ「damage_mc」― attack_hit × └ムービークリップ「attack_mc」 └ムービークリップ「hit_area」 となりました。 直接「damage_mc」内へ引数が渡せなかったので、フレーム1にある「stand_mc」なら出来るのではと思い、「hit_area」に… _parent._parent.stand_mc.attack_hit(hit_area); と書いて試してみましたが、「stand_mc」の中へも入れません。 質問の時に実証済みの通り、階層を上がることは出来ます。 更に、成功した「char1」より余計に1階層上に上がってから「char1」に戻るパスを書いてみると、ちゃんと中へ入ることが出来ました。
お礼
お手数お掛けしまして申し訳ないです。 ありがとうございます。 パスの問題はクリアとのことなので、あとはタイミング合うように頑張ります。 お世話になりました。