- ベストアンサー
シーンをまたいだサウンドon/offボタンの設定
- BGMを一つのボタンでon/offを切り替える方法について質問です。
- シーンをまたいで表示と音のon/offを切り替える方法がわかりません。
- 1つのFLASHで制御し、ローディング終了後にBGMをスタートしたいです。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
play_flg と snd をメインのタイムラインに置いてはいかがでしょう。 その作例では ON / OFF ボタンとして使うムービークリップのものになっているので、シーンを移動してムービークリップがステージから退場すると、この2つも一緒に消えてしまいます。同じスクリプトを書くと同じ変数が作られ、引き続き使用できるように見えますが、これは同じ名前で新たに作り直されただけのことで、前のシーンで使われていた変数とは別物になります。 サウンドを制御する snd はともかく、再生状況を管理している play_flg が途中で消えてしまうと再生状況に応じたフレームを正しく表示できなくなります。 play_flg がメインのタイムラインのものになっていれば、ムービーが再生されている間は消えずに残っています。 シーンを移動するたびにムービークリップの絵もリセットされますが、load イベントと play_flg を利用して、再生状況に応じたフレームを復元することができます。 スクリプトの一例です。 スクリプトは、タイムラインと ON / OFF ボタンとして使うムービークリップに書きます。 (↓各行頭に全角のスペースが入っています。コピーする際は、全て半角に置き換えてください) ●タイムラインに書くスクリプト play_flg は何度も初期化されると困ります。 そこで、変数が未定義だった時に返される undefined という値を利用して、最初の1度だけ初期化します。このスクリプトは読み込みが終わった直後、BGM を最初に再生するフレームに記述してください。 ついでに、この時にサウンドの設定も行います。 ローディング画面から実際のコンテンツに移るなどの作品中で1回しか再生されない場所であれば、if 文を使わずに書くこともできます。 /*********************************/ //最初の1度だけ初期設定を行う if( play_flg == undefined ) { //サウンドの設定 snd = new Sound(); snd.attachSound( "bgm" ); snd.onSoundComplete = function() { this.start(); }; snd.start(); //再生状況を保持する変数 //再生時true、それ以外はfalse play_flg = true; } /*********************************/ ●各 ON / OFF ボタンに書くスクリプト(全ボタン共通) /*********************************/ onClipEvent(load) { //再生状況に応じたフレームを表示 this.gotoAndStop( Number( _root.play_flg + 1 ) ); } on(release) { with( _root ) { //サウンド再生時は止める if( play_flg ) { snd.stop(); play_flg = false; } //停止中の場合は再生する else { snd.start(); play_flg = true; } //再生状況に応じたフレームを表示 this.gotoAndStop( Number( play_flg ) + 1 ); } } /*********************************/ play_flg と snd がムービークリップのものである場合はターゲットパスを省略できますが、今回はメインのタイムラインのものになるため、ターゲットパスが必要になります。 このムービーが loadMovie などで他のムービーに読み込まれる時は、_root が指す対象の問題で相対パスで記述するといった工夫、さらにはサウンドの制御にもひとひねりが必要です。 ターゲットパスについては解説書や解説サイトなどをご参考になさってください。
お礼
DPE様 できました!! 完璧です!!! メインフレームに入れるなんて考えもしなかったです(汗 ゴールデンウイークからずっとやってたのでほんと助かりました!! ほんとにほんとにほんとに!ありがとうございます。