- ベストアンサー
stopAllSound()の実行順番を変える方法
- 外部SWF内のフレームに組み込んだイベントサウンドがなっている状態で、_rootのフレームアクションにてstopAllSound()を使用した場合、すべてのサウンドがストップされます。
- フレームに組み込んだイベントサウンドをSound Objectに変えずに、このままの方法で意図した動作をさせるにはどうすればよいでしょうか。
- stopAllSound()の実行順番を変えることで、イベントサウンドを停止させた後にSound Objectをfunctionにてstart()することができます。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
#1です。 stopAllSounds(); は単に音を止めるのではなく, その時点でのSoundインスタンスを全て削除する という意味らしいです(私は最近知りました)。 ですから, リンケージの識別子などで音を呼び出す場合 stopAllSounds(); 後には, --Sound Object 生成省略-- はできません。 stopAllSounds(); は必ず使用するという原則で, Sound Object の生成を省略したい。 ということですね。 適当な場所にムービークリップを作って, 仮にインスタンス名を「musicMC1」とでもしておきます。 その「musicMC1」の フレーム2 に音を入れておいて, フレーム1 には stop(); を書いておきます。 音の「同期」は「スタート」あたりが良いと思います。 1 a □レイヤー2 ・・・|○ [] | □レイヤー1 ・・・|○|○| ↑音波みたいな物が見える そして, stopAllSounds(); musicMC1.gotoAndStop(2); で音がなると思います。 パスは省略していますが,「musicMC1」の置き場所によって, _root.musicMC1.gotoAndStop(2); などにしてください。 音を消すときは, stopAllSounds(); musicMC1.gotoAndStop(1); です。 stopAllSounds(); を使った場合,Sound Object を再生成するか, 上のように再びタイムラインを動かして,音を鳴らすしかないと思います。 --- 追伸の件 ------ #1での追伸に対するお返事ありがとうございました。 また, 試されていないのではないかという疑惑をいだいてしまい,申し訳ございません。 ムービークリップ内のテキスト入力ですか。 そこまでは検証してみませんでした。 おかげさまで,疑問が晴れてすっきりしました。
その他の回答 (1)
補足要求 と 追伸 です。 まず,補足要求。 >> フレームに組み込んだイベントサウンドを >> Sound Objectに変えずに >> このままの方法で意図した動作をさせるには >> どうすればよいでしょうか? この4行の上まではなんとなくどんな状態か理解できたのですが, この4行が理解できません。 >> Sound Objectに変えずに とはどういう状態なのでしょうか。 また, >> このままの方法で意図した動作をさせるには 意図した動作がどんな動作なのかがわかりません。 意図した動作とはどういう動作なのでしょうか。 私は Sound 系にあまり明るくないので,答えられる自信はありませんが, 答える以前に,4行のご質問の意味がよくわかりません。 また,補足説明していただくと,他の方も答えやすくなるとは思います。 次に,追伸。 前々回のこのカテゴリでのご質問, 質問:MCを2つ以上ドラッグする方法 http://oshiete1.goo.ne.jp/kotaeru.php3?q=1937529&rev=1 ↑教えて!goo ↓OKWave (同じです) http://okwave.jp/kotaeru.php3?q=1937529&rev=1 (#1と#2を上下逆にしています) #1の方の書いてくださっているスクリプトの最後の行。 //表示を更新 updateAfterEvent(); この1行を見落とされていませんか? その補足に, >> マウスポインタがそのつどずれ、ユーザーにストレスを >> 与えてしまいます。 と書かれていますが, 私が #1 の方のスクリプトを実際に試してみましたところ, startDrag を使うより,もっとスムーズにカーソルが動きましたよ。 私は,#2で,#1の方のおっしゃることを前提に,それを補足しただけです。 テキスト入力 に関しては,どっちもどっち。 startDrag を使っても,使わなくても,しにくいことは確かですが, 一度,#1 の方の方法を実際に試されることをお薦めします。
補足
お返事有難う御座います。 サウンドは、大きく分けて2つの処理方法が御座います。 1、Sound Objectを生成して、サウンドを操作する方法。 2、ライブラリなどに読み込んだりしたサウンドを フレームにイベントサウンドやストリーミングサウンドとしてあらかじめ組み込む方法です。 2を1に変えて(変更して)という意味でした。 わかりにくく申し訳御座いません。 意図した動作とは、*でも記載しましたが (*イベントサウンドを停止させてから、sound objectをfunction にてstart()させたい) がさせたい動作です。 これもわかりにくくて申し訳御座いませんでした。 もっと詳細に言いますと、 1、外部SWFのフレームイベントサウンドが鳴る 2、_rootのボタンなどのアクションによって、_rootのfunctionが呼びだされ、外部SWFのフレームイベントサウンドを止めてすぐに_rootのsound objectで生成をしてstart()し、違う音を鳴らす。 stopAllSound(); --Sound Object 生成省略-- my_sound.start(); としても、my_sound.start()は鳴りません。 いずれも、誰が見ても解るきちんとした書式で書かないといけなかったなと反省しております。 ご指摘有難う御座いました。 以前の#1の方の補足ですが、 この事例に限らずですが、実際にすべて試して検証しております。 また、updateAfterEvent()に限らず、 頂いた貴重なスクリプトは、動作しない場合でも どこが原因でどこを何に換えると正常に動作するかも、動作検証させて頂いております。 テキスト入力では、完全に入力ができませんでした。 *startDrag()がないため。 *startDrag()追加で正常に入力できました。 *MC内のさらに中にTextfieldを作っているためstartDrag()が必要なのかもしれません。 やはり、昔からまったくそっくりそのまま 同じスクリプトで議論がされていますが、 そのままストレス無く使えて~というほど 万能ではないと言うことは明らかだと思われます。
お礼
お返事有難う御座います。 stopAllSounds()は、そのすぐ後の行に sound Objectを生成しても、それすら削除してしまうみたいです。 でも、これでスッキリしました。 有難う御座います。 教えていただいた方法も正常に動作致しました。 MCを増やさずにスクリプトのみでと考えていましたが、この方法以外選択肢がなさそうですね。 動作検証などをせずに質問する方が多いですから 疑われても仕方の無いことだと思いました。 また、今回もご迷惑をかけてしまいましたが、 質問する側がきちんと詳細を明記しない事が 原因だと考えていますので、反省し以後気をつけますので、どうぞお許し下さいませ。 この度もご教授のおかげですべて解決出来ました。 本当に有難う御座いました。