• ベストアンサー

ボタンの上にマウスが乗るとムービが動くようにしたい(FlashMX2004)

FlashMX2004でこのようなことをしたいのですが ボタンとムービーにどのような設定をすればよいのでしょうか? ステージ上に重ならないように2つのボタン(A,B)と1つのムービー(C)が 配置されています。1つ目のボタン(A)の上にマウスが乗ると、ムービー (C)の2フレーム目から6フレーム目まで動きます。(B)の上にマウスが乗ると 12フレーム目から16フレーム目まで動きます。 ボタンの数が多いのでなるべくfunction関数を使いたいのですが、 使い方が分かりません。よろしくお願いします。

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

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

イベントハンドラを使って、イベント発生時に呼ぶ関数の定義の方法、ということで、よろしいでしょうか? 対象がボタンでもムービークリップでも同様なのですが、  インスタンスのターゲットパス.イベントハンドラ名 = function ()  {   ・・・  }; という形式になります。普通は、フレームアクションとして設定します。 例えば、ステージに、ボタンのインスタンス button_a と button_b、ムービークリップのインスタンス clip_c があるとします。 button_a にマウスカーソルが乗った時、clip_c のフレーム2から、button_b にカーソルが乗った時はフレーム 12 から再生させるスクリプトは、次のようになります。このスクリプトは、メインのタイムラインのフレームに設定します。  //ボタンAにカーソルが乗った時の処理  button_a.onRollOver = function ()  {   clip_c.gotoAndPlay(2);  };  //ボタンBにカーソルが乗った時の処理  button_b.onRollOver = function ()  {   clip_c.gotoAndPlay(12);  }; (↑このスクリプトをコピーして使う場合は、各行の行頭に入っている全角のスペースを、全て半角のスペースかタブに置き換えてください。このまま使うとシンタックスエラーになります) ボタンにマウスが乗った時の処理はこれで完成ですが、これだけでは、ムービークリップがステージに登場するなり、いきなり再生されてしまいます。 ムービークリップは、ボタンにイベントが発生するまで再生を止めておく必要があります。 止めるのは最初の1度だけで構いませんので、ムービークリップがステージに登場した時1度だけ発生する load イベントを使うといいでしょう。 従来の onClipEvent を使っても同じですが、先ほどのボタンの処理と同様に function の形式で書くこともできます。このスクリプトは、やはりメインのタイムラインのフレームに設定します。  //最初はムービークリップの再生を止めておく  clip_c.onLoad = function ()  {   this.stop();  }; また、これでは、Aにカーソルが乗った時はフレーム2から、Bにカーソルが乗った時はフレーム 12 から再生されるというだけで、そのまま clip_c の最後のフレームまで一気に再生されてしまいます。 Aの時はフレーム2~6、Bの時はフレーム 12 ~ 16 で再生を止めるには、clip_c のフレーム6と 16 に、それぞれ stop(); アクションを設定します。これはメインのタイムラインにではなく、ムービークリップのタイムラインに設定します。 長くなってすみませんでした。 不明な点がありましたら、補足してください。

apache6
質問者

お礼

詳しく説明してくれてありがとうございます。 無事、完成させることができました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

noname#107580
noname#107580
回答No.3

こんにちは! まず、ムービークリップの編集画面の、フレームの 1、12、16、フレームに、 this.stop(); を入れます。 シーンに戻って、 ムービークリップに名前を付けます。 例えば『move_c』としました。 ムービークリップを選択した状態で、 onClipEvent(load) {  function aaa (){   gotoAndPlay(2);  }  function bbb() {   gotoAndPlay(12);  } } Aボタンに on(rollOver) { move_c.aaa(); } Bボタンに on(rollOver) { move_c.bbb(); } ただ、2フレーム目から6フレーム目までの再生後には6フレーム目で止まった状態になります。 1フレーム目に戻りたいのであれば、 ムービークリップの12,16フレームの this.stop(); を this.gotoAndStop(1); にして下さい。

全文を見る
すると、全ての回答が全文表示されます。
  • rightegg
  • ベストアンサー率41% (1357/3236)
回答No.1

こんにちは。 function関数ではないですけど。 ムービー(C)には名前つけてますか? 仮に「movie_c」だとすると、 on(RollOver){ movie_c.gotoAndPlay(2); } on(RollOut){ movie_c.gotoAndStop(1); } てな感じでいけません?

apache6
質問者

補足

うまく動作しませんでした。 ムービーの方はレイヤーを追加して 1フレーム目にstop();でいいのでしょうか?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • ムービークリップ内のボタン

    MacOS10.2、FlashMXを使っています。 4つのムービークリップ(m_1、m_2、m_3、m_4)が下記スクリプトでコントロールされるように設定しました。 やりたいことは、ひとつひとつのムービークリップ内にボタンを設定し、クリックすると外部swfをstageに読み込むようにしたいのです。ムービークリップ内にボタンを設置しても動かないし、メインフレーム内に透明アイコンで on (release) { loadMovie ("●●.swf", "stage"); } を設定すると、4つのムービークリップが表示されたまま、●●.swfが表示されてしまいます。(stageムービークリップはフレームの一番上に設置しています) ●●.swfが読み込まれた時、4つのムービークリップが表示されないようにするにはどうすればよいでしょうか? よろしくお願いいたします。 メインフレーム内のスクリプト gdepth = 4; m_1.depth = 4; m_2.depth = 3; m_3.depth = 2; m_4.depth = 1; theArray = [m_1, m_2, m_3, m_4]; function turn() { theArray.sort(ncheck); function ncheck(a, b) { num1 = a.depth; num2 = b.depth; if (num1<num2) { return 1; } else if (num1>num2) { return -1; } else { return 0; } } trace(theArray) } function construction() { theArray[0].ta = 90; theArray[0].ts = 100; theArray[0].tr = 0; theArray[0].swapDepths(4); theArray[1].ta = 60; theArray[1].ts = 80; theArray[1].tr = 15; theArray[1].swapDepths(3); theArray[2].ta = 40; theArray[2].ts = 75; theArray[2].tr = 30; theArray[2].swapDepths(2); theArray[3].ta = 20; theArray[3].ts = 60; theArray[3].tr = 45; theArray[3].swapDepths(1); }

    • ベストアンサー
    • Flash
  • Flash フレームを指定してムービークリップ再生

    ActionScript超初心者です。 よろしくお願いします。 ステージ上にボタン「A」「B」「C」を配置、 ボタン脇のスペースにムービークリップを配置、各ボタンで切り替え再生させたいと思っています。 2フレーム目に簡単なアニメーションのムービークリップ「animA」を、 3フレーム目に同様の「animB」4フレーム目に「animC」を配置し、 各ボタンon (release)で各ムービークリップの再生をしたいのですが うまくいきません。 どこにどのようなスクリプトを書けば良いか教えていただけないでしょうか。 よろしくお願いします。

    • ベストアンサー
    • Flash
  • ActionScript3.0フレーム移動について

    お世話になります。 Flash ActionScript3.0で、ボタンをクリックしたら、 階層違いのシーンに移動するという 単純なところでつまずいています。 一番上の階層には、 1フレーム目 フレームラベル "a" 2フレーム目 フレームラベル "b" として、それぞれ this.stop();を書いてあります。 "a""b"には、それぞれムービークリップが配置してあって、 今やりたいことは、"a"に配置してあるムービークリップの 2つ下(中?)の階層にあるボタンをクリックしたら、一番上の階層の"b"に移動して、 "b"に配置してあるムービークリップを表示するようにしたいのです。 "a"のムービークリップのボタンのあるフレームには、 this.stop(); button01.addEventListener(MouseEvent.CLICK,jumpB); function jumpB(event:MouseEvent):void { MovieClip(parent.parent).gotoAndStop("b"); } と書いてみましたが、 [TypeError: Error #1009: null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません。] と怒られます。 試しに MovieClip(stage).gotoAndStop("b"); とか、"b"に配置してあるムービークリップにインスタンス名"b_mc"を与えて MovieClip(parent.parent).b_mc.play(); などと苦し紛れにやってみましたが、すべて同じように怒られます。 どのようにすれば、下の階層から一番上の階層の別フレームに 移動することができますでしょうか? よろしくお願い致します。

  • flash5でムービーの制御

    2つのボタン(A,B)とそれぞれに対応したムービー(A,B)を用意しました。ボタンAにマウスカーソルを重ねるとムービーAが開始され、ボタンBにマウスカーソルを重ねるとムービーBを開始するというものを作りました。 しかし、ボタンAにマウスカーソルを重ね、ムービーAの再生中にボタンBにマウスカーソルを重ねるとムービーBが開始されるのですが、ムービーAが再生中でも消えてしまいます。この時、ムービーAを最後まで再生させたい場合はどのようにしたらよいのでしょうか? タイムライン上ではムービーAをフレーム1、ムービーBをフレーム2と連続して配置し、ボタンA,Bにマウスを重ねたときそれぞれのフレームにgotoAndPlayを指定しています。 よろしくお願いします。

  • ActionScriptでボタンをクリックしたときの動作をまとめて指定したい

    FlashMX2004で、メニューを作成しています。 ボタンの数が多いことから、いちいち一個ずつのボタンにクリックしたときの動作(getURL)を指定するのが大変なので、一番最初のフレームにActionScriptで指定したいのです。 確か、以前そういうのをやった記憶があるのですが、 とても急いでいるので調べる時間がありません。 複数のボタンが、一番上の階層にあるもの(メインメニュー)と、ムービークリップ内に配置したサブメニューと様々あります。 それぞれの指定の仕方を教えてください。 よろしくお願いします。

    • ベストアンサー
    • Flash
  • FlashMX アクションについて

    動画をFlashMXで作成しているのですが、「ボタンにマウスポインタを置く上で動画が始まる」という設定の仕方がわかりません。「はじめてのActionScript」という本を買って来て見ても難しくてできません。 初心者でも解りやすいHPなど、教えてください。

  • マウスオーバーでの外部swf読み込み

    ボタンにマウスオーバーすると、外部swfを読み込むムービーを作っております。 | ̄ ̄ ̄ ̄ ̄| |    A    | |_____| ■■■■■■ こんな感じで、黒の■がそれぞれボタン、読み込むステージがAの枠です。(ちょっとズレてますが。。)■ボタンとステージaはぴったり隣接しています。 例えば、一番左の■ボタンにマウスオーバーし、Aにムービーが流れます。 このときにカーソルが■ボタン、Aの上を行き来しても、ずっとムービーが流れていて、■ボタンとAを合わせた領域をはみ出すと、はじめてムービーが消えるというものを作りたいのです。 要は、■ボタンにマウスオーバーすると、下の図の部分にカーソルが乗っている間はムービーが再生中。下の図の部分をカーソルが外れるとムービーが消えるというものです。 | ̄ ̄ ̄ ̄ ̄| |    A    | |_____| ■ これを各■ボタンに設定。そして■ボタン自体は単体で外部リンクします。 いろいろやってみたのですが、■ボタンからAに乗るとムービーが再度頭から再生したり、上図のかたまりを図形とした透明領域を作ると■ボタン単体のリンクで引っかかってしまったりと。。 良いアドバイスはないでしょうか?よろしくお願いいたしますm(_ _)m

  • FlashMX2004について質問です。

    FlashMX2004について質問です。 ムービー内でボタン押下した際に別シーンor別フレームに移動したいと考えていのですが 実際はボタン押下しても、何もおきません。 (ボタン押下するフレームで、stop()発行しているのが問題?) 文法チェックでもエラーとならないため、原因がわかりません。 どなたか教えてください。 ソースは以下の通り。 on (release) { gotoAndPlay(133) }

    • ベストアンサー
    • Flash
  • Flash判定アクションスクリプトの記述を教えてください。

    仕事の都合でFlash(Versionは8)を扱わなければいけなくなり只今勉強中兼HP製作中です。 行き詰まっているので教えてください。 現在、シーン1のタイムライン1フレーム目にいます。 ステージ上には、 ムービークリップが4つ(名前 m_A , m_B , m_C m_D)配置されています。 ボタンが5つ(名前 b_A , b_B , b_C , b_D , b_Z)配置されています。 ボタンb_Aには on (release) { with (_root.m_A) { play(); } } と記されていて、ボタンを押すとm_Aは再生されて10フレーム目でストップします。 ボタン B~D も同様にボタンを押すとムービークリップB~Dもそれぞれ再生されて10フレーム目でストップします。 ムービークリップ m_A~Dのフレーム10の中には、さらにボタン b_Xがあり、 それを押すとさらに再生されて20フレーム目までいったところで、gotoAndPlayで1フレーム目に戻りストップします。 シーン1のタイムライン1フレーム目に配置されている、ボタンb_Zを押すと、 ムービークリップ m_A~Dのタイムライン1フレーム目にいるものはそのままで、 そして、10フレーム目でストップしていたものは、 再生されて20フレーム目までいったところで、gotoAndPlayで1フレーム目に戻りストップになったところで、 (m_A~Dが全てタイムライン1フレーム目に行ったところで、) シーン1のタイムライン1フレーム目から再生されて、 タイムライン10フレーム目でストップといった命令を書きたいのですが、 どうやって指定してやればよいでしょうか? 多分、if文等を使用するんでしょうが、さっぱりわかりません。 詳しく教えていただければ、幸いでございます。

  • 動くボタンの作り方

    MX2004を使っています…。 ステージ上のa_mcの中にb_mcがあってb_mcには onClipEvent (enterFrame) { this._rotation +=2 } というスクリプトを記述しました。 これでステージ上の動きはうまく行っていて さらに、それにb_mcにボタン機能をつけたいと思い、 b_mcの中にボタンクリップ→c_mcをつくりました。 そのボタンクリップにつけたい動きは、そのボタンにマウスを重ねると _rootに配置した、空のhyouji_mcに外部の0000_swf現れ、マウスを放すと消えるというものなのですが いろいろ本などをみてとりあえずそのボタンクリップ→c_mcに on(rollOver){ loadMovie("0000.swf",hyouji); } on (press) { getURL("url"); } というスクリプトをつけてみました。 getURLは正常に動くのですが外部ファイルは読み込めません… ちなみに、_rootに配置した、空のhyouji_mcにはhyoujiのインスタンス名を入れています。あと、swfフィアルは、元のファイルと同じところに入れています。 スクリプト勉強中で原因がわかりません… mcの入れ方など、間違っているところがありましたら ご指摘よろしくおねがいします… 他のスクリプトをみても、自分のファイルにうまく応用できない状態です…_rootに配置した、外部swfがマウスを放すと消えるというスクリプトも教えて頂けるとありがたいです。 宜しくお願いします。

    • ベストアンサー
    • Flash
このQ&Aのポイント
  • 購入店またはメーカーサービスに依頼が必要となっているが連絡先が分からない
  • パソコンのOSはWindowsであり、接続は有線LANです。関連するソフト・アプリはありません。電話回線はアナログ回線とひかり回線です。
  • ブラザー製品についての質問で、廃インク吸収パッドが満杯になった場合の解決方法を教えてください。
回答を見る