• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:AS3.0で子MCから他の子MCのフレームへ移動)

AS3.0で子MCから他の子MCのフレームへ移動

このQ&Aのポイント
  • AS3.0のFlash professional CS5を使用して、メインタイムライン上に配置された子ムービークリップから他の子ムービークリップのフレームに移動したいです。
  • 具体的には、子ムービークリップ内にあるフレームラベルを使って移動したいです。ボタン(btn1)を押すと、sub1からsub2に移動し、btn2を押すとmc2内のpart2に移動したいです。
  • しかし、フレームラベルpart2への移動方法がわかりません。現在のコードでは、mc2が未定義となっています。解決策を教えていただきたいです。

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

  • ベストアンサー
  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.1

Flash は 基本的にその時点で存在するものにしか命令できません。 メインタイムラインの「mc1」と「mc2」は同時に存在しないため お互いに命令しあうことは基本的にできません。 あえてするなら次のような感じです↓ //---「mc1」フレーム "sub2" のスクリプト--- //「mc1」の再生を停止 stop(); //「btn2」にクリック時に実行するイベントリスナーを登録 btn2.addEventListener(MouseEvent.CLICK,Click2); //関数 Click2 の定義 function Click2(evt:MouseEvent):void { //親階層に毎フレーム時間実行するイベントリスナーを登録 MovieClip(parent).addEventListener(Event.ENTER_FRAME,gotoPart2); //親階層をフレーム "main2" に進めて停止 MovieClip(parent).gotoAndStop("main2"); } //関数 gotoPart2 の定義 function gotoPart2(evt:Event):void { //親階層の「mc2」をフレーム "part2" に進めて停止 evt.target.mc2.gotoAndStop("part2"); //親階層の毎フレーム時間実行するイベントリスナーを削除 evt.target.removeEventListener(Event.ENTER_FRAME,gotoPart2); } //-------------------------------- ただし Flash Player 10 以上用SWFをパブリッシュする必要があります。 (Flash Player 9 にはこれらができないバグ(仕様?)がある) (同様のことは Flash Player 8 以下でもできるのでおそらく 9 だけのバグ) 「mc1」とその「parent」=「root」は同時に存在しているので 「mc1」から「root」にイベントリスナーを登録することはできます。 また 「root」は「mc2」と同時に存在しているので 「root」から「mc2」にgotoAndStop命令をすることはできます。 ~~~日常生活での類似例~~~ 私は 今日 家にいるが 明日 はいない。 弟は 明日 家にいるが 今日 はいない。 これでは明日 弟に対して 「犬の散歩をしろ」 と命令することができないので 今日も明日も家にいる母に 明日 弟に対して 「犬の散歩をしろ」 と命令してもらうことにした。 ~~~~~~~~~~~~~~~ 上の方法は Flash Player 10 ではできると言っても 不確実で危ない橋を渡るようなものですから 普通はあまりしないと思います。       スクリプトがバラバラになるのでわかりにくいかもしれませんが 以下のようにする方がもう少し確実だと思います。 「root」の フレーム "main1" 辺りに次のような変数を用意し, var flag:Boolean = false; 「mc1」の フレーム "sub2" の Click2 を次のように変更し, //関数 Click2 の定義 function Click2(evt:MouseEvent):void { //親階層の flag の値を true にする MovieClip(parent).flag = true; //親階層をフレーム "main2" に進めて停止 MovieClip(parent).gotoAndStop("main2"); } 「root」フレーム "main2" に次のように書く。 //flagの値がtrueだったら if (flag) { mc2.gotoAndStop("part2"); }

yukito12
質問者

お礼

素早い回答ありがとうございます。 この場合はやはりフラグなどを使わないとだめなんですね。。 大変よくわかりました。 他の方の質問に対する回答をよく拝見させてもらっていますが,例えなど説明が大変わかりやすくとても勉強になります。 また何かありましたらよろしくお願いいたします。 ありがとうございました!

関連するQ&A