Flashでムービーのボタンを非アクティブにする方法

このQ&Aのポイント
  • Flashで作成したムービー中に配置されたボタンがアクティブになってしまう問題があります。この問題を解決するために、同一レベルでの読み込みや特定のボタンの挙動制御などの方法を試してみましたが、うまくいきませんでした。バグや仕様上の制約なども考えられますが、解決策についてアドバイスをいただければ幸いです。
  • また、ムービー中に共通の音楽を再生/停止するボタンを配置する予定ですが、レベル1で読み込んでいるムービーについて、トップのムービーに記述すれば有効になるのか疑問です。共通のデザイン要素としてフッタに配置する予定ですので、効果的な実装方法についても助言をいただければ助かります。
  • 質問がやや複雑で、解決策が見つからず困っています。Flashで作成したムービー中のボタンが意図せずアクティブになってしまう問題を抱えています。同一レベルでの読み込みや特定のボタンの制御などの方法を試しましたが、解決に至りませんでした。また、共通の音楽再生/停止ボタンの実装方法についても迷っています。解決策が分かる方がいらっしゃいましたら、アドバイスをお願いします。
回答を見る
  • ベストアンサー

【Flash】レベル0に配置したムービーのボタンを非アクティブにするには

Flashで下記のようなコンテンツを作っています。 <top.swf>1分ほどのムービーのあとメニュー画面。 メニュークリックでレベル1に2.swfを読み込み再生 <2.swf>2分ほどのムービーのあと停止、 ムービーの最後に2.swfをアンロードするボタンあり (top.swfに戻ります) 【問題点】 2.swfを再生中、top.swfのメニュー画面が アクティブになってしまい、ムービーと関係ない部分がボタンになってしまいます。 これを防ぐために同一レベルでの読み込みも試しましたが、 デザイン上は問題ないのですが2.swfからtop.swfに戻る際に top .swfの頭から再生されてしまいます。 これを防ぐ良い方法はないでしょうか? また、top.swfと2.swfに共通の<音楽を再生/停止するボタン>を 付ける予定なのですが、2.swfをレベル1で読んでいる場合、 top.swfに記述すればそれが有効になるのでしょうか? 共通デザインのフッタに配置する予定です。 すみませんがお分かりになる方よろしくお願いします。

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

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

Flash MX 以降をお使いでしたら、ボタンとしての機能を操作する enabled というプロパティがあります。true でオン、false でオフになります。 このプロパティを、ムービーを読み込む前に false に、読み込んだムービーが削除される前に true に直しておくという方法はいかがでしょう。 例えば、load_btn というボタンがあるとしますと、  load_btn.enabled = false; とすると、クリックやロールオーバー・ロールアウトの検出が行われなくなります。 なお、ボタンのターゲットパスは、on*** = function() のスタイルで書く場合と on アクションの中で書く時とでは違いますので、注意が必要です。 この件は以前他の質問で詳しく説明したことがありますので、よろしければご参照ください。  ・ボタンの無効化   http://okweb.jp/kotaeru.php3?q=1245949 Flash では、目的のもの(変数・関数・インスタンスなど)までのターゲットパスさえ正しければ、どの階層からでも他の階層にあるターゲットを操作することができます。 レベル1に読み込まれた 2.swf から、レベル0の top.swf にあるボタン load_btn は  _level0.load_btn.enabled = true; このように、レベルを指定してターゲットパスを書くことで操作できます。 --------------------- サウンドの制御には様々な方法がありますが、ボタン操作でオン・オフを切り替える場合は、タイムラインに挿入せず ActionScript で動的に挿入し、制御する方法がオススメです。 ActionScript で音を鳴らすには、リンケージという設定が必要です。 ライブラリのサウンドシンボルを選び、右クリック( Mac では control +クリック)のメニューから「リンケージ...」を選択してください。「リンケージプロパティ」パネルが開きます。 「 ActionScript に書き出し」にチェックを入れ、識別子に名前を入力してください。 「最初のフレームに書き出し」のチェックは外した方がいいでしょう。ここのチェックを入れると、サウンドデータがフレーム1に書き出されるため、ロード画面を作っている場合はロードのアニメがなかなか始まらなくなってしまいます。 しかし、データをフレーム1に書き出さない場合は、別途サウンドシンボルを読み込む、あるいは他のフレームに書き出しておくなどの処理をしなければ、音が鳴らなくなってしまいます。 簡単な対策としては、ロードアニメの邪魔にならないフレームに、タイムラインを使ってサウンドインスタンスを仮に挿入し、「同期:」のリストから「ストップ」を選んで停止しておくといった方法があります。 スクリプトで音を鳴らすには、まず Sound クラス( Flash MX 以前はオブジェクト)を1つ作り、attachSound でサウンドを挿入します。 あとは、音を鳴らしたいところで Sound.start 、止めたいところで Sound.stop を実行するだけです。 また、Flash MX からは onSoundComplete というイベントが使えるようになりました。 再生が終了した時に発生するイベントで、予め処理を定義しておくと、再生終了時に自動的に呼び出されます。 これを利用して、再生終了後に再び start を実行するように定義すると、サウンドを無限ループ再生にすることもできます。 1つの Sound オブジェクトでは、1つの音しか管理できません。 例えば、top.swf と 2.swf とでは別々の BGM を鳴らしたい場合は、両方に1つずつ Sound オブジェクトを作ってそれぞれのムービーの BGM を管理し、再生・停止ボタンで操作する時は、レベルを指定して Sound オブジェクトを呼び出すといった方法があります。 ちなみに、レベル1にムービーを読み込んでいても、レベル0で演奏中の BGM は、特に明示的に止めない限り演奏は続きます。top.swf と 2.swf とで同じ BGM を鳴らしておきたい時に利用してください。 スクリプトはいろいろ考えられますが。 top.swf と 2.swf で同じ名前の Sound オブジェクトを作り、これとは別に変数をもう1つ用意して、現在アクティブになっているレベルを管理します。 仮にこの変数を active_level 、Sound オブジェクトを snd すると、  //アクティブになっている方のBGMを鳴らす  this[ "_level" + active_level ].snd.start(); という使い方もできます。 active_level の値は、最初は0、2.swf が読み込まれる時に1、2.swfが削除される前に0に戻しておきます。 ( 2.swf から操作する時は、_level0.active_level というターゲットパスになります) すると、再生・停止ボタンはレベル0の top.swf に1つしかなくても、top.swf と 2.swf の BGM をそれぞれ制御できるようになります。 ところで、ActionScript の Sound オブジェクトは  snd = new Sound(); このようにして作りますが。 Sound(); の ( ) の中には、サウンドを管理するムービークリップの名前を指定します。省略した場合は、ムービー全体のサウンドを管理するオブジェクトになります。 2.swf で作る Sound オブジェクトでは、  snd = new Sound( _root ); または  snd = new Sound( this ); このようにターゲットを指定してください。 指定しないと、top.swf で読み込まれた時に音が鳴らなくなります。 ActionScript で鳴らす音は、イベントサウンドといって、start を実行する度に再生されます。 いつでもクリックできる再生ボタンを作る場合は特に、ボタンが押される度に start を実行されるようになっていると、輪唱のように音が同時にダブって鳴ってしまう可能性があります。 回避策としては、演奏中かどうかの情報を変数に保存し、その値を見て start を実行するかしないかを決めるといった方法があります。 これについても、以前他の質問でご紹介しましたので、よろしければご参照ください。  ・音の再生について   http://okweb.jp/kotaeru.php3?q=1230063 長くなってすみませんでした。 不明な点がありましたら、補足してください。

5tanda
質問者

お礼

詳しい解説ありがとうございます! とても参考になりました。。。

関連するQ&A

  • FLASHのボタン

    FLASH8で、ホームページのメニューボタンを作っております。 デザインとしては、 (1)ボタンに、マウスカーソルを乗っけると、 (2)そのボタンが、”クルクルと2回転し停止”する ※”クルクルと2回転して停止”が終わる前に、 マウスカーソルをそのボタンから離しても、 その”クルクルと2回転して停止”というムービー(アクション?)はきちんと最後まで再生させる ようにしたいと思っております。 ”2回転させて停止”させるまでは、ムービークリップの、 最初のフレームに『start();』を、 最後のフレームに『stop();』のactionscriptを入れることでなんとかできるようになったのですが、 どうしても、上記の※の部分が出来ません・・・ マウスカーソルをボタンから離すと、”クルクルと2回転して停止”が完了する前に、ピタッと、最初の静止した状態のボタンに戻ってしまいます。 どなたか、解決法を教えていただけないでしょうか。

  • FLASHでボタンを押すと、FLASHムービーが再生から停止までいくようにしたいです。

    FLASHの初心者です。 以下の物が作りたくてチャレンジをしております。 構成的には、一個の画面と、一個のボタンがあり、 あらかじめFLASHムービーを何個か作り、 一個のFLASHファイルに読み込んで、 ボタンを押すと一個目のムービーが再生、最終フレームで停止、 もう一回ボタンを押すと次のムービーが再生、最後… という具合にしていきたいです。 おそらくアクションスクリプトを使用して作らなければならないと 思うのですが、うまくできないのです… ついでにもう一つ、お聞きしたいことがあります。 フレーム数を右下に常に表示させたいです。 この方法も教えて欲しいです。 使用ソフトはFLASH CS3で、アクションスクリプトは3.0を使っています。 説明下手ですみません… よければ誰か助けてください>△<

  • FLASHでボタンを押すとムービーが動くというものを作りたい

    文章の説明が難しいので、、、例ですが http://www.scei.co.jp/ のコーポレートの「会社データ」を押すと、右側に会社データが表示されます。そのままその下のメニュー「プレスリリース」を押すと、また、同じ場所にプレスリリースが表示されます。 こんなのを作りたいのですが、どうしたらいいのかわかりません。 一応、ボタンとそれに対応するムービーをそれぞれ作ったところです。 1つのレイヤーの中の1フレームずつにムービーを貼ってるのですが、そのまま再生されてムービーが代わる代わる動いているだけです。制御の方法などがあると思うのですが、教えていただけないでしょうか。

  • 配置したSwfファイルの下にあるボタンに触れないようにしたいのです!

    こんにちは。flashを初めてようやく1か月が過ぎた新米の僕なのですが、一つ伺わせていただきたいことがありまして、投稿させていただきました。 現在flash8でムービーを作っています。 現在作っているムービーの中で、 (1)トップ画面があり、そこにRollOverで飛べるリンクがある (2)別のところにあるボタンを押すと、トップ画面の上に別の画面が表示される というようにしてあります。その別の画面の中で、画面の下にあるRollOverに触れてしまうとリンク先に飛ばされてしまって困っています。出来ればこのボタンを無効にしたいと思っているのですが、どうすればよろしいでしょうか。 ちなみにその画面の表示は、 function showdocu() { cover.changeContent("document.swf"); } docu_btn.onRelease = showdocu; で、RollOverのボタンは function showbbs() { cover.changeContent("bbs.swf"); } bbs_btn.onRollOver = showbbs; としてあります。浅学の僕の質問にはあきれてしまうかもしれませんが、よろしくお願いいたします。

  • フラッシュ・ムービークリップの扱い方

    フラッシュで作った音楽付きSWFファイルが複数ありまして、例えば「A.swf」、「B.swf」」、「C.swf」というふうに順番に再生(ボタン機能は無し)していくような一つのSWFに合体させたいのですが、どのような方法がありますでしょうか? 新規ファイルにそれぞれムービークリップとして読み込んで、タイムラインに並べたのですが、アクションの付け方がよくわからず、全て同時に動き出してしまいます。良い方法がありましたら、よろしくお願いいたします。

  • フラッシュの読み込んだSWFファイルのボタンが動かないです。

    いまフラッシュを個人的に勉強しているのですが、どうしても先に進まない問題に突き当たってしまいました。SWFファイル(写真をボタンによって進めたりバックできる)を別につくったメインの、架空のムービークリップに読み込んでも、ボタンのスクリプトが動きません。ムービークリップに読み込んだら、ボタンはみえるのですが、写真が出てきません。 SWFファイルだけを再生したら写真もみえるし、ボタンを動かすことはできるのですが。 どなたか教えていただけますか。返事お待ちしています。

  • 同レベルへの外部SWFファイル読み込みについて

    製作環境はMX/WIN XPです。 Lv.2 メニュー(menu.swf) Lv.1 メインコンテンツ(1.swf/2.swf/3.swf/4.swf...) Lv.0 背景(bg.swf) 現在、上記のような形で作っています。 メインコンテンツの中身はプロフィールや仕事内容などです。 メニューは常に一番手前に表示されており、クリックして外部SWFの1,2,3...が切り替わるようにしています。 が、当たり前ですが同レベルに表示している場合、クリックすると表示していたコンテンツがブツっと切れて、クリックされたコンテンツが表示されますが、これを何とかしたい。 という質問です。 例えば、 現在表示されているコンテンツ    ↓タイムライン 1.swf ●●●●|○○○ ●がコンテンツのムービーで○がそのフェードアウトのムービーだとして”|”の部分で停止します。 で、メニューで2.swfをクリックした際にその1.swfの停止した部分から再生し、○の再生が終われば2.swfのコンテンツを表示 クリックされたコンテンツ 2.swf ●●●●|○○○ としたいのですが、これが順に1,2,3と進むならいいのですが、訪問者がどれをクリックするかわからない場合はどうすればいいでしょう。上のたとえが1→2ではなく、4→1→2→4などランダムに押されてもうまく動くようにしたいです。 説明下手でわかりにくいかもしれませんが、同レベルに表示されているコンテンツを綺麗に消してから、同レベルに次のコンテンツを表示させたいのです。 この例でなくとも、何かよい方法がありましたら、ご意見いただければと思います。 よろしくお願いします。

    • ベストアンサー
    • Flash
  • FLASHで外部ムービークリップのコントロール

    現在学校に通いFLASHの勉強をしています。 ある程度の基本的なスクリプトなら自分で書けるレベルです。 今回、学校での課題作成にあたり 外部のSWFファイルに配置したムービークリップのコントロールというのは出来るのかどうかが分からず投稿しました。 使用ソフトはflashCS3です。 例えば、a.swfにボタンを配置し、 押したらb.swfの「b_mc(ムービークリップ)を再生」とかはアクションスクリプトで制御出来るのでしょうか? また、こういった動作をしたい時のスクリプトの書き方などを回答として頂けると助かります。 よろしくお願いします。

  • FLASH 8 でのボタン作成

     FLASH 8 でムービーを作成しようとしてるんですが、再生ボタンや停止ボタンを作成しても、エラーが起きて動作しません。FLASH 5 と同じ方法では駄目なのでしょうか?  どなたか詳しく教えてください。宜しくお願いします。

  • FLASHで動画と再生などのコントロールボタンを付ける方法。

    デジタルビデオカメラで撮影したムービーを FLASHに埋込み、QuickTime Playerの様な再生、停止 などのボタンを配置し、これらのボタンでビデオをコントロール出来るようにしたいと考えています。 この方法をどこかのサイトで初心者にも判るように 丁寧に解説しているところはありませんでしょうか? ソフトはFLASH MXを利用しています。 もちろん最後はswfではき出します。 検索でなかなか見つけれませんでしたので、 宜しくお願いします。