プロが教えるわが家の防犯対策術!

環境=Flash8,WinXPでオーサリングしています。
質問です。


外部SWF内のフレームに組み込んだイベントサウンドがなっている状態で、

_rootのフレームアクションにて

_global.bgm_sound2_start=function (){
bgm_sound2 = new Sound();
bgm_sound2.attachSound("bgm_sound2.wav");
bgm_sound2.start();
}
を記載。

_root.mc1.mc2のフレームアクションで

stopAllSound();
_global.bgm_sound2_start();

を記載。(*イベントサウンドを停止させてから、sound objectをfunction にてstart()させたい)

この場合に限らずですが、
個別にSound Objectを操作しないで
stopAllSound()を使用した場合、
stopAllSound()の記載位置にかかわらず、
スクリプト内の時間的前後が無視され
スクリプト内のどこでもすべてのサウンドがストップされます。*トップレベルfunctionのため。

フレームに組み込んだイベントサウンドを
Sound Objectに変えずに
このままの方法で意図した動作をさせるには
どうすればよいでしょうか?

どうぞ宜しくお願い致します。

A 回答 (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での追伸に対するお返事ありがとうございました。
また,
試されていないのではないかという疑惑をいだいてしまい,申し訳ございません。
ムービークリップ内のテキスト入力ですか。
そこまでは検証してみませんでした。
おかげさまで,疑問が晴れてすっきりしました。
    • good
    • 0
この回答へのお礼

お返事有難う御座います。
stopAllSounds()は、そのすぐ後の行に
sound Objectを生成しても、それすら削除してしまうみたいです。
でも、これでスッキリしました。
有難う御座います。
教えていただいた方法も正常に動作致しました。
MCを増やさずにスクリプトのみでと考えていましたが、この方法以外選択肢がなさそうですね。

動作検証などをせずに質問する方が多いですから
疑われても仕方の無いことだと思いました。
また、今回もご迷惑をかけてしまいましたが、
質問する側がきちんと詳細を明記しない事が
原因だと考えていますので、反省し以後気をつけますので、どうぞお許し下さいませ。

この度もご教授のおかげですべて解決出来ました。
本当に有難う御座いました。

お礼日時:2006/02/08 18:44

補足要求 と 追伸 です。



まず,補足要求。

>> フレームに組み込んだイベントサウンドを
>> Sound Objectに変えずに
>> このままの方法で意図した動作をさせるには
>> どうすればよいでしょうか?

この4行の上まではなんとなくどんな状態か理解できたのですが,
この4行が理解できません。

>> Sound Objectに変えずに

とはどういう状態なのでしょうか。
また,

>> このままの方法で意図した動作をさせるには

意図した動作がどんな動作なのかがわかりません。
意図した動作とはどういう動作なのでしょうか。

私は Sound 系にあまり明るくないので,答えられる自信はありませんが,
答える以前に,4行のご質問の意味がよくわかりません。
また,補足説明していただくと,他の方も答えやすくなるとは思います。


次に,追伸。

前々回のこのカテゴリでのご質問,
質問:MCを2つ以上ドラッグする方法
http://oshiete1.goo.ne.jp/kotaeru.php3?q=1937529 …
 ↑教えて!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()が必要なのかもしれません。

やはり、昔からまったくそっくりそのまま
同じスクリプトで議論がされていますが、
そのままストレス無く使えて~というほど
万能ではないと言うことは明らかだと思われます。

補足日時:2006/02/05 18:08
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!