• ベストアンサー

ムービークリップから親のタイムラインを変更する

■シーン1 ラベル1---クリップ1(ボタン)--ラベル2---- FlashMXでひとつのシーンにラベルを2つ付け、その間にムービークリップを1つ入れているのですが、そのクリップから、フレームアクションとしてラベル2に飛ばすように、gotoAndPlay("シーン1", "ラベル2"); を 指定したのですが、ラベル1(クリップ1の再現)に飛んでしまいます。 どうすればクリップの中からシーン1のラベル2に飛ばすことができるのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • mat-21
  • ベストアンサー率56% (91/162)
回答No.2

「_root」に関してアドバイス致しますと、FlashのActioScriptを作成する際、「_root」「_parent」「this」など、頻繁に使います。 そこで、仮想として、作りはじめるFlashを「教室1」と仮定して、その教室の中に、生徒が何人かいます。その生徒が、「ムービークリップ」になります。特殊な生徒がいて、その生徒は「ボタン」という保険係や体育係といった命令しかできない係員の生徒もいます。さらにその教室1には、何匹かの何の命令も聞かないペットの「グラフィック」というペットもいます。 つまり、 ★教室1が一番ベースとなる「Flash(追々書き出しの際、.SWFという拡張子のついたものになります)」。 ★教室1に配属された「生徒」がシーンに配置されたシンボルの「ムービークリップ」と「ボタン」。 ★教室1にいる「ペット」がシーンに配置されたシンボル「グラフィック」。 ☆ムービークリップのシンボルは作ったけれど、結局Flashに配置されていないものは、不登校の生徒だったりします。 ☆Flashに直接ペンツールなどで描いたもの(シンボルにしていないもの)は、教室1内の落書きだと思って下さい。 さて、本題です。 ペットのグラフィック以外は、お互いにActionScriptという命令を指示できるわけです。そこで、命令するには、それぞれ名前が必要です。生徒の名前が「ムービークリップ・ボタンのインスタンス名」です。教室1は「_root」で、仮に生徒A君の名前を「seitoA」とすると、常に命令をするには、「教室1の生徒A君」という位置づけが必要となり、ActionScriptでは、この場合「_root.seitoA」となります。ただし、条件はその生徒は、教室1内のどの班にも属していないことが必要です。 つまりどれかの班に入ると直接その生徒に命令できません。では、その班とは何か?それは、生徒Aがどれかの班に入っている場合は、班を通してでないと命令できません。また、この班はムービークリップの設定でないとその生徒に命令できません。つまり、1人~複数の入った生徒の班もまた、ムービークリップなのです。つまり、ムービークリップ内にムービークリップが存在するといったことになります。ムービークリップでいうと、班A「hanA」のムービークリップのタイムライン内で「seitoA」がムービークリップとして存在する場合です。よって、ActionScriptでのその生徒の位置づけは、「_root.hanA.seitoA」となり、班を通しての意味は「教室1の班Aの生徒A」となります。 さて、「_parent」とは、そのムービークリップからみた、その一つ前のムービークリップを指します。例えば前者の「生徒A」からみた「班A」は、「_parent」であり、「_root.hanA」でもあります。つまりこの場合、「_parent」=「_root.hanA」は同じ意味です。では、この場合の「教室1」はどうでしょう?「生徒A」からみた「教室1」は、「_parent._parent」であり、「_root」でもあります。つまりこの場合、「_parent._parent」=「_root」は同じ意味です。もともと「parent」は「親」という意味ですが、この仮説からいうと、「一つ前のムービークリップ」と考えた方がいいかもしれません。 では「this」とはなんでしょう?その名の通り、自分自身の事です。つまり、自分に命令する時に使用します。そんな事が、あるのでしょうか?これが結構あります。例えばそのムービークリップの中で、タイムライン10に飛びたい場合は、「this.gotoAndPlay(10)」となるし、自分自身を透明度50%にしたい場合は、「onClipEvent(load){ this._alpha=50; }」となります。自分自身が全ての1~全てのフレームに達したら不可視にしたい場合は、「onClipEvent(enterFrame){ if(this._currentframe==this._totalframes){ this._visible=false; }}」となります。

fmx27
質問者

お礼

ご回答ありがとうございます。 ムービークリップ間については教室の概念ですごくよくわかりました。不登校の生徒などは可笑しい!シーンを変えるには、教室1から教室2へ行くといったイメージかな。。

その他の回答 (1)

  • DPE
  • ベストアンサー率85% (666/776)
回答No.1

gotoAndPlay("シーン1","ラベル2"); の形式は、シーンのタイムラインのフレームアクションでないと、正常に動作しません。ムービークリップにはシーンの考え方がありませんので、ムービークリップのタイムラインでジャンプ先のシーンを指定しても、無効になってしまいます。 ムービークリップからシーンのフレームに戻る場合は、MovieClip オブジェクトの中の gotoAndPlay メソッドを使います。 ムービークリップがステージにある(何かのムービークリップと入れ子にいっていない)のでしたら、  _root.gotoAndPlay("ラベル2"); もしくは  _parent.gotoAndPlay("ラベル2"); で、いかがでしょう。

fmx27
質問者

お礼

ご回答ありがとうございます。 ひとまずこちらで大丈夫でした。 _root.gotoAndPlay("ラベル2"); このrootの意味するものがわからなかったのですが、ムービークリップの置かれているところということで解釈しました。 ですが、複雑になるとやっぱり分かりません。。。。

関連するQ&A