- ベストアンサー
マウスクリックでBGMを途中停止したい
windows2000 Flash MX アニメを作りBGMが一緒に流れるようにしています。 BGMを途中で止めるにはボタンを作成し、そのボタンをクリックするとBGMが停止する方法は理解できているのですがボタンが目障りです。 マウスをクリックするとその時点でBGMが停止するようなアクションの記述はありませんか。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
ムービークリップイベントの mouseDown は、マウスのボタンが押されると発生します。ムービークリップの上でなくても、ステージのどこかでボタンが押されさえすれば発生するイベントですので、これを利用してマウスボタンの押下を検出することができます。 mouseDown を利用するにはムービークリップが必要です。何でもいいのですが、ダミーのムービークリップを適当に作っておくといいでしょう。 このムービークリップを非表示(アルファを0にするか、onClipEventの load イベントを使って _visible を false にする)にして、ステージのどこかに置いておきます。 ムービークリップアクションで、マウスボタンが押された時( mouseDown イベント発生時)にBGMを止めるアクションを設定します。 タイムラインで音を鳴らしており、単純に演奏を止めたいだけでしたら、アクションは大体こんな感じになります。 //最初に自分自身を不可視にする onClipEvent( load ) { this._visible = false; } //マウスボタンが押されたらBGMをストップ onClipEvent( mouseDown ) { bgm_ctrl = new Sound(); bgm_ctrl.stop(); } (↑このスクリプトをコピーして利用する場合は、各行の行頭に入っている全角のスペースを全て半角のスペースかタブに置き換えてください。このまま使うとシンタックスエラーになります)
その他の回答 (2)
- DPE
- ベストアンサー率85% (666/776)
#2です。 Flash MX では、MovieClip.on*** という形式で、ムービークリップ上でイベントが起きた時に行う処理を、関数として予め定義しておくことができるアクションが追加されました。 MovieClip.onMouseDown = ・・・と onClipEvent( mouseDown ) は同じことです。ただ、onClipEventは最初からインスタンスに設定するため、そのインスタンスに対する指示であるのが明確ですが、MovieClip.on*** = では、どのターゲットに対する定義なのかを指定しなければいけない点が異なります。 ですから、this.on*** の時は、this がどのターゲットを指しているか注意しなければならない場合もあります。 メインのタイムラインのフレームアクションで定義したのであれば、this は _root、つまりこのムービーのことを指していますが、あるムービークリップのタイムラインで this.on***・・・と定義した場合、this とはそのムービークリップのことを指します。this の指す内容が分かりにくければ、ターゲット.on*** とも書けますので、こちらを使うと確実です。 今回はムービークリップであれば何でも良いので、this の指すターゲットは気にしなくても構いません。なお、メインのタイムラインのフレームアクションで this.onMouseDown = ・・・とした場合は、ダミーのムービークリップは不要になります。 onClipEvent で書かれるスクリプトは、全て MovieClip.on*** = ・・・のスタイルでも書けますが、MovieClip.on*** = ・・・は Flash Player 6 以降でないと動作しませんので、ご注意ください。 > フルスクリーンの場合、ESCキーを押してウインドウ枠を表示さしてメニューの ・・・ ・・・のお言葉から察するに、Flash Player もしくはプロジェクタのお話だと思います。 Flash Player に対する指示は fscommand を使って出します。 fscommand には、Flash Player(またはプロジェクタ)のプログラムを終了する "quit" というコマンドがあります。これをボタンに設定することで、Flash Player のメニューからではなくムービー内のボタンで終了させることができます。 on(press) { fscommand("quit"); } Flash MX からはムービークリップをボタンのように使えるようになりました。ムービークリップを使って MovieClip.onPress = ・・・と書くこともできますが、単なる終了ボタンであれば、従来のボタンで十分だと思います。
お礼
あつかましい質問にも関わらず丁寧にご回答くださいましてありがとうございます。 おかげで理解でき、すっきり気分です。 解説本を見ながら作成しているのですが、わからない点が多くて困ります。 でも、ここでの解答は非常に解り易くいつも助けられています。
- 00hiroto00
- ベストアンサー率16% (2/12)
逃げの回答ですが、 Flashのエリア全体にボタンオブジェクトを作り、 アルファを0%にすれば、大丈夫だと思いますよ。
お礼
ご回答ありがとうございます。 成るほど、そのような手があるんですね。
補足
ご回答ありがとうございます。 大変勉強になり、そしてうまく出来ました。 ならばと次のように記述してみました。 this.onMouseDown = function() { bgm_ctrl = new Sound(); bgm_ctrl.stop(); } これでもマウスクリックでBGMが停止しましたが問題点があるのでしょうか。 別の質問で、恐縮の上に恐縮ですがご教授いただければ幸いです。 フルスクリーンの場合、ESCキーを押してウインドウ枠を表示さしてメニューの「ファイル」から「終了」を選び終了さしていますが、これはボタンを作成してアクションで一気に終了まで実行する事は出来ないでしょうか?