- 締切済み
flashで音を消す設定について
たびたびの質問で失礼します。 flashでクイズゲームを作成中です。 正解時と不正解時、それぞれに効果音("ok"、"ng")を設定しているのですが、音を出さないようにするためのボタンをつける方法がわかりません。 これまでに試したのは、ゲーム開始前の1フレーム目にボタンを設置して、以下のようにActionScriptを書いてみたのですが、まったく反応しません。 まったく見当違いのような気もするのですが解決方法が分かりません。 正しい方法をアドバイス、お願いいたします! -------------------------------------------- ※フレーム1に snd_1=new Sound(); snd_1.attachSound("ok"); snd_2=new Sound(); snd_2.attachSound("ng"); ※ボタンに on (release) { snd_1.stop( ); } on (release) { snd_2.stop( ); }
- みんなの回答 (2)
- 専門家の回答
みんなの回答
#1です。 > snd_1=new Sound(); > snd_1.attachSound("ok"); > snd_1.start(0,0) > > と書く。 > 逆に不正解を選ぶと「不正解」のフレームに飛び、そこには > > snd_2=new Sound(); > snd_2.attachSound("ng"); > snd_2.start(0,0) そういうことですか。 それでは消えません。 インスタンスを消したとたんに,またインスタンスを作っているのですから。 1行1行何をしているのか ちゃんと分けて考えてください。 ------------------------------ snd_1=new Sound(); snd_1.attachSound("ok"); snd_2=new Sound(); snd_2.attachSound("ng"); ------------------------------ ここまでが,あらかじめ作っておくべきインスタンスです。 これは何度も作る必要はありません。 フレーム1 などに書いておけば良いだけです。 ------------------------- snd_1.start(0,0) ------------------------- と ------------------------- snd_2.start(0,0) ------------------------- この2つが, 作成したインスタンスをスタートさせるスクリプトです。 これだけを「正解」のフレームと「不正解」のフレームにそれぞれ書けば良いのですよ。 何度も同じサウンドインスタンスを作らなくても,良いのです。 ムービークリップも再生するたびに同じムービークリップを作成するわけではないでしょう。 同じムービークリップだと,ムービークリップの作成は1回(1つ)だけで, 何回もリプレイする場合は,それを何度も play(); させれば良いだけです。 音も同じです。 この状態で,つまり フレーム1でサウンドインスタンスを用意して,正解不正解フレームに各それぞれのスクリプトを用意している状態で, snd_1 を鳴らさないボタンには --------------------- on (release) { snd_1.stop(); delete (snd_1); } --------------------- snd_1 を鳴らさないボタンには --------------------- on (release) { snd_2.stop(); delete (snd_2); } --------------------- と書けば良いのです。 すると,フレーム1で用意されたサウンドインスタンスが削除されるので, ボタンを押せば,以降音は鳴りません。 逆にまた鳴り始めさせたいときは, サウンドインスタンスを作ってやれば鳴り出します。
今ひとつ何を質問されているのかよくわからないのですが, 音を消すのではなくて, 音を出さないようにするという方法ですね。 その方法なら,いろいろ方法はあると思います。 ボリュームを 0 にしてしまうとか, 変数フラグを立てて,そのフラグの値が0である時は start させて,それ以外の時は start させないとか ご質問に書かれている状態で, 一番楽にできる方法は delete でサウンドインスタンスを消してしまう方法かなと思います。 on (release) { delete (snd_1); } もし,音が継続的に鳴っている物でしたら on (release) { snd_1.stop(); delete (snd_1); } で音を止めてから,サウンドインスタンスを消去すると そのときの音も消え,それ以降も音は鳴りません。 delete演算子ですが, 便利なようですが何でもかんでも消せるわけではありません。 この辺を参考にしてみてください。 Macromedia Flash非公式テクニカルノート delete http://www.fumiononaka.com/TechNotes/Flash/FN0310005.html
補足
ご回答ありがとうございます。 わかりにくい質問で申し訳ありません。 クイズの答によって「正解」または「不正解」のフレームに飛び、そのフレームに入るとそれぞれに応じた効果音が鳴るようにしてあるのですが、ゲーム開始の前にstopボタンをクリックすると、ゲーム中に効果音が出なくなるようにしたいのです。 現在の内容は下記の通りです。 ********************************************************* 「クイズ」のフレームで正解を選ぶと「正解」のフレームに飛び、そのフレームには snd_1=new Sound(); snd_1.attachSound("ok"); snd_1.start(0,0) と書く。 逆に不正解を選ぶと「不正解」のフレームに飛び、そこには snd_2=new Sound(); snd_2.attachSound("ng"); snd_2.start(0,0) と書く。 続けて、教えて頂いたdelete演算子を使って以下の通りにしましたが、stopボタンをクリックしても音が鳴ってしまいます。 deleteの使い方が正しくないのでしょうか? 教えて頂いたサイトも参照させて頂きます。 ************************************************************ フレーム1に配置したstopボタンに on (release) { delete (snd_1); } on (release) { delete (snd_2); } と書く。