• ベストアンサー

Flash:ボタンのサウンド(マウスオーバー時)設定について

Flashのみでホームページを制作中なのですが、そこで一つ問題が生じてしまいました。 考えてもなかなか解決しません。どなたか教えてください。 メニューボタンが3つと、それを押すと各々3つのページ(3シーンに分けてあります)にジャンプするように作ってあります。 ボタンはどのページでも常に同じ位置にあります。 このボタンのマウスオーバーのフレームのみに「ボワ~ン」というサウンドをいれました。 マウスカーソルを3つのボタン上でなでるようにすると「ボワ~ンボワ~ンボワ~ン!」となる感じです。 サウンドに関してはそれだけでよかったのですが、ここからが分からなくなりました。 ボタンをクリックすると、希望のシーンにジャンプします。 それでも見た目上は、メニューボタン部分にはまったく変化がありません。 なのに、構造的にはシーンのジャンプが行われているわけで、 そうすると、ボタンをクリックしたまま、そのボタン上でマウスを動かさない状態でいると、 新しいページになった瞬間に、もう一度「ボワ~ン」と鳴ってしまうのです。 これを回避する方法をご存じの方、いらっしゃいませんか? 基本的にボタンのマウスオーバーフレームにサウンドを割り当てたのが、いけないのでしょうか? アクションスクリプトのオブジェクト用のもので、なにか使えるものはないでしょうか? たとえば、「オンマウスオーバー」の設定かなにかで、指定の範囲外から範囲内へのアクセスのみに反応して、 マウスカーソルがもともと範囲内に会った場合には無反応、といったようなアクションをご存じの方いませんか? よろしくお願いします!

質問者が選んだベストアンサー

  • ベストアンサー
  • Qsans
  • ベストアンサー率48% (28/58)
回答No.4

補足 <シーン0>   <シーン1>   <シーン2>   <シーン3> ボタン1      音なしボタン   ボタン1      ボタン1 ボタン2      ボタン2      音なしボタン   ボタン2 ボタン3      ボタン3      ボタン3      音なしボタン グラフィックのところを「音なしボタン」にすればいいのです。 ボタンを複製して、「音あり」「音なし」の二つを用意することです。 このようなことをすれば、いろいろ応用できます。

omokawa
質問者

お礼

Qsansさん、ご丁寧にありがとうございます。 >ボタンを複製して、「音あり」「音なし」の二つを用意することです。 さっそく試してみました。 ただ、この方法だと、「シーン1」内の「ボタン1」が鳴らなくなってしまうのです。 たしかに、どこにも飛ばないボタンの音をなくすのは、ナビゲーション機能としては解りやすく、一石二鳥ではあるのですが…。 勝手な言い草ばかりですみません。 おっしゃるとおり、この方法をなんとか応用してみようと思います。 どんなふうに工夫できるか、なんだか楽しみになってきました。 本当にありがとうございました。

その他の回答 (7)

  • hokuto_ds
  • ベストアンサー率45% (106/233)
回答No.8

7、8の回答の追加です。 「一番最初のロールオーバーで、音が鳴らない」欠点の対処法を見つけましたので、追記します。 方法としては、「ボタンの後ろに、二回りくらい大きい透明ボタン(ヒット領域しか持たないボタン)を配置」し、その透明ボタンに「rollOverでサウンドボリュームを100」のアクションを仕込んでおきます。これで、ボタンにさわる前に透明ボタンのアクションが作動し、ボリュームが戻って音が鳴ります。 アクション全体は 「各シーンの最初のフレーム」に koukaon=new Sound(_root); koukaon.attachSound("piyon"); koukaon.setVolume(0); (※サウンドを「リンケージ」であらかじめ書きだしておくのは、前の解説といっしょです。koukaonというのは、新しく作成するサウンドオブジェクトインスタンスの名前なので、任意の名前で可。"piyon"は、サウンドの「リンケージ」でつけた名前を入れてください) 「メインのボタン」に on(rollOver){ koukaon.start(); } (※もちろん、on(press)でシーンジャンプのアクションも入れます) 「透明ボタン」に on(rollOver){ koukaon.setVolume(100); } これで、動作します。 注意点は、透明ボタンを必ず「メインボタンの後ろに」おくことと、透明ボタンとメインのボタンの大きさの差ですね。あんまり差(つまり、今回アクションを作動させるにあたっての、透明ボタンの実際のヒット領域)が小さいと、一瞬でカーソルが通りすぎてしまって作動しないこともあるみたいです。3回りくらい大きければだいじょうぶかとも思いますが、実際ためしてみてください。いろいろとかねあいもあると思いますので。 あと、ボタンふたつを新しいムービークリップの中に入れて、そのムービークリップに「フレームに割りあてるアクション」を割りあてて動かすこともできると思います。この場合、フレームにサウンドのアクションを記述せず、すべてそのムービークリップと、中のボタンで動くことになるので、構成としてはこっちがすっきりかも。 そのばあい、ムービークリップに割りあてるアクションは onClipEvent(load){ koukaon=new Sound(this); koukaon.attachSound("piyon"); koukaon.setVolume(0); } となります。new Soundが"this"を参照する点を注意してください。 ただ、なぜかこの方法をためしてみたところ、シーンをジャンプするためのボタンアクションがどうも動かない‥‥;;フレームジャンプは問題ないのに‥‥。。バグなのか、私の指定のしかたに問題があるのか、ほかのケースでも、フレームジャンプは問題ないのに、シーンジャンプになるとお願いもしてないような動きをするボタンがいる‥‥‥‥;;; ので、このあたりは、使う場合は、おためしください。

omokawa
質問者

お礼

hokuto_dsさん、こんにちは。 ご親切な回答、本当に感謝します。 お教えいただいた一連の作業、まだ試してはいません(すみません…)が、これらは私にとって、とても貴重で重要なものです。 なんとも恐縮のほかはありません。 >シーンをジャンプするためのボタンアクションがどうも動かない‥‥ これは、もしかしたら、ムービークリップ内における、親タイムラインの認識方法に「シーン名」が存在しないからではないでしょうか? 「ラベル名」のみにするといいのかも…、試してみます。 それでは、hokuto_dsさん、本当にどうもありがとうございました。 詳細なご回答に個人教授を受けたような気分になりました。

  • hokuto_ds
  • ベストアンサー率45% (106/233)
回答No.7

すみません、なぜか途中までしか入らなかったので、下の回答のつづきです。 [スクリプト表記](//以下は、コメントです。そのままペーストしても問題ないです) ●一番最初のフレームに koukaon = new Sound(_root);  koukaon.attachSound("piyon"); //サウンドの読み込み koukaon.setVolume(0); //サウンドボリュームを無音に設定 ●各シーンのボタンオブジェクトに on(rollOut){ koukaon.setVolume(100); //カーソルがはずれたら、ボリュームを戻す } on(rollOver){ koukaon.start(); //カーソルがのったら音を鳴らす } あと、on(press) でシーンジャンプ(gotoAndPlay)を指定しておきます。これでオーケーです。 フレームに表記する分は、もし「シーン1を必ず最初に読み込む」ことが決まっているのなら、「シーン2、シーン3では最初の二行は省略」できます。サウンドファイルの読み込み指定なので。入れておいても問題はないです。 さて[欠点]ですが‥これはけっこう大きいかもしれません。「ロールアウトでボリュームが100に」なる設定なので、「一番最初の音が鳴らない」んです;(シーン1を、最初に読んだときです)同じ理由で、シーンがジャンプした時にカーソルがボタン上になかった場合も、いちど「ロールアウト」がおこるまで音が鳴りません。ボタン以外の操作でシーンがジャンプするような場合、そこにも「ボリュームを100に戻す」アクションを入れておいたほうがいいでしょう。 「シーン1の音が鳴らない」欠点は、たとえば、「最初の読み込みと、シーン2などからのジャンプとで、見かけが同じだがちがうフレームにジャンプする」よう設定する、という回避策が考えられます。「最初のシーン1」ではボタンの「ロールオーバー」に音を設定しておき、「次のシーン1」で、上のアクションをしこんだボタンをおいたフレームにユーザーを誘導するわけです。(ページにもよりますが‥‥) あと、いくつかの音を使う場合、「最初のフレームですべてのサウンドをひとつひとつnew SoundとattachSoundで読み込んで、無音に設定する」「ボタンのロールアウトですべての音の設定を100に戻す」ことで簡単に対応できます。 hitTestなど使うともっと別の方法で可能かも、などとも思うのですが、ひとまずの回避策です。考え方の参考になればさいわいです。

omokawa
質問者

お礼

hokuto_dsさん、続けてこんにちは。 …と、書き込んでいる最中に、「回答 No.8」が舞い込んだという知らせ。 何はさておきそちらを読みたいので、いったん失礼します。 ありがとうございました。

  • hokuto_ds
  • ベストアンサー率45% (106/233)
回答No.6

アクションスクリプトを勉強しはじめたばかりの者なので、ちょっと足元はおぼつかないのですが、私が見つけたやり方を紹介します。(ただし、後述しますが、欠点があります)。フラッシュのバージョンは5です。 ざっとアクションの基本を説明すると、まず 「各シーンの最初のフレームで、ボタン効果音のサウンドボリュームを0(無音)にする」 → 「ボタンアクション  on(rollOut) でボタン効果音のサウンドボリュームを100(デフォルト)に設定する」です。これで、まずそのシーンにとんだ時、最初のフレームでボタンの音が無音になり、一度カーソルがはずれるまで鳴らなくなります。 サウンドをオブジェクトとして使うためには、サウンドに識別子をつけて書き出す必要があります。本などにも書いてありますが、「ライブラリ」パレットでそのサウンドを選び、パレットの横についているメニューから「リンケージ」を選択、でてきたボックスの「このシンボルを書きだす」をチェック、「識別子」に好きな名前(英数字)をいれて「OK」します。   ☆私は「識別子」にとりあえず「piyon」という名前を使ったので、それでスクリプトを記述してあります。好きな名前に変えて使ってください。あと、「kouoaon」というのも、好きな名前にとりかえてください。 [スクリプト表記](//以下は、コメントです。そのままペーストしても問題ないです) ●一番最初のフレームに koukaon = new Sound(_root);  koukaon.attachSound("piyon"); //サウンドの読み込み koukaon.setVolume(0); //サウンドボリュームを無音に設定 ●各シーンのボタンオブジェクトに on(rollOut){ koukaon.setVolume(100); //カーソルがはずれたら、ボリュームを戻す } on(rollOver){ koukaon.start(); //カーソルがのったら音を鳴らす }

omokawa
質問者

お礼

hokuto_dsさん、こんにちは。 詳細なご回答、本当にありがとうございます。 参考にさせていただきます。

  • Qsans
  • ベストアンサー率48% (28/58)
回答No.5

またまた、回答しちゃいますが... omokawaさんの使用しているバージョンにもよりますが アクションスクリプトの中でテルターゲット(tell target)を 使えば、バリエーションは増えます。 比較的tell targetは、応用しやすいです。 ムービーの中にボタンを配置して利用するときなどです。 もちろんtell targetというぐらいですから、ムービーに「インスタス名」 を付けなければなりません。 また、ムービーの中にムービーを入れたりするときに生じる「パス名=階層」 を理解する必要もあります。 たとえば、フォルダの中のさらにフォルダの中にあるファイル名を指定する のと同じ原理です。 以上のように、簡単なアクションスクリプトは、抑えていて損は無いと思います。 また、あまり、シーン別に区切るということだけを考えずに、 同シーン上だけでも工夫すれば、収まります。 ひとつのレイヤー上で、初歩的なアクションスクリプト「goto」「stop」などを使って、キーフレームごとに、擬似シーンを作ることです。 <例> 。=空白のキーフレーム(フレームアクションを設定できます) 。<擬似シーン1>----。<擬似シーン2>---。<擬似シーン2>---。 といった感じですが... 以上、参考になれば幸いです。がんばってください。

omokawa
質問者

お礼

Qsansさん、こんにちは。 続けてのご回答、本当に感謝しています。 参考にさせていただきます。 ありがとうございました。

  • Qsans
  • ベストアンサー率48% (28/58)
回答No.3

それは、別のシーンに移動しても同じところに同じボタンが配置されている からでしょうね? そのようなことをしたい場合、ボタンごとに別のシーンへリンクするような 形にしたいのであれば、同じボタンを配置したときに、ボタンを「編集」で グラフィックに代えてあげればいいでしょう。 <シーン0>   <シーン1>    <シーン2>    <シーン3> ボタン1      グラフィック   ボタン1      ボタン1 ボタン2      ボタン2      グラフィック   ボタン2 ボタン3      ボタン3      ボタン3      グラフィック 意外と見栄えのよいフラッシュのホームページでも このような、シンプルな構造で作成しているものも多いものです。 どうしてもスクリプトを使いたいという人は、それでもいいですが、 発想の仕方で、無理をする必要はありません。 また、なかなかこのようなテキストの意見交換の場では、教えるにも 限界がありますので。

omokawa
質問者

お礼

Qsansさん、こんばんは。 具体的なご回答ありがとうございます。 それから… >発想の仕方で、無理をする必要はありません。 こういったご意見、本当にホッとします。 一人で考えていると、あれよあれよという間に煮詰まってしまい、挙げ句は「ポカーン」としてしまう始末なものですから。 参考にさせていただきます。 ありがとうございました。

  • amour7
  • ベストアンサー率33% (35/104)
回答No.2

(全体-ボタン)の領域のオブジェクトを作って、その領域からmouseoutしたら音が鳴るようにしてみてはいかがでしょう。 場合によってはうまくいくはずです。

omokawa
質問者

お礼

amour7さん、こんばんは。 貴重なご意見ありがとうございます。 なるほど、逆にするわけですね。 …考えもおよびませんでした。 参考にさせていただきます。 これからも、よろしくお願いいたします。

noname#5549
noname#5549
回答No.1

こんばんは。 普通にクリック時(press)にするのが 最も簡単で早いと思うのですがいかがでしょう? それともロールオーバー時にどうしても鳴らしたいですか?

omokawa
質問者

補足

こんばんは、humourさん。 「どうしても」そうしたいのです。(未熟者のわがままか…) マウス位置の検知かなにか、そういったスクリプトでなら出来ますか? どうでしょう? なんでもいいです、アドバイスよろしくお願いします。

関連するQ&A

  • マウスオーバーで伸びるサブメニューが正しく動作しません

    こんばんは。 以下サイトのメインメニューの左三つのボタンのように、 ボタンをマウスオーバーするとボタンの上にサブメニューが上がり、 サブメニューにあるテキストがそれぞれボタンになっているという仕組みを作ろうとしています。 http://www.mizkan.co.jp/index_1.html ・マウスオーバー addEventListenerのMOUSE_OVERでボタンの上にカーソルが乗ると、 gotoAndPlayでサブメニューが上がるアニメーションのフレーム番号に飛ぶ。 ・マウスアウト addEventListenerのMOUSE_OUTでボタンからカーソルを外すと、 gotoAndPlayでサブメニューが下がるアニメーションのフレーム番号に飛ぶ。 上記のscriptを作るところまでは上手くいきました。 しかしマウスオーバー時に伸びているサブメニューにマウスカーソルを乗せると、 マウスオーバーとマウスアウトのアクションが繰り返し実行され、 サブメニューが上がったり下がったりのアニメーションを繰り返してしまいます。 この動きは、おそらく、サブメニュー部分の領域が一瞬ボタンではないと認識され、マウスアウトのアニメーションが動きだすが、やはりボタンとして認識されマウスオーバーのアニメーションが動き出す。という動きがループしてしまっているのではないかと思われますが、解決方法が見つかりませんでした。 上に記載した方法以外でも同じような動きになる作り方があればご教授ください。 宜しくお願い致します。

  • FLASHのボタン

    FLASH8で、ホームページのメニューボタンを作っております。 デザインとしては、 (1)ボタンに、マウスカーソルを乗っけると、 (2)そのボタンが、”クルクルと2回転し停止”する ※”クルクルと2回転して停止”が終わる前に、 マウスカーソルをそのボタンから離しても、 その”クルクルと2回転して停止”というムービー(アクション?)はきちんと最後まで再生させる ようにしたいと思っております。 ”2回転させて停止”させるまでは、ムービークリップの、 最初のフレームに『start();』を、 最後のフレームに『stop();』のactionscriptを入れることでなんとかできるようになったのですが、 どうしても、上記の※の部分が出来ません・・・ マウスカーソルをボタンから離すと、”クルクルと2回転して停止”が完了する前に、ピタッと、最初の静止した状態のボタンに戻ってしまいます。 どなたか、解決法を教えていただけないでしょうか。

  • マウスオーバーで全ムービークリップ停止

    上手く説明出来ないのですが、 ムービークリップのメニューを作ろうとしています。 マウスオーバーで全部のムービーが止まる様にしたくて、 一つのムービークリップに全部のムービークリップのメニューをまとめ、選択すると ーーーーーーーーーーーーーーーーここから シーン=シーン1,レイヤー=menu,フレーム マウスイベントはボタンインスタンスでのみ使用できます。 シーン=シーン1,レイヤー=menu,フレーム マウスイベントはボタンインスタンスでのみ使用できます。 ーーーーーーーーーーーーーーーーここまで とエラーになってしまいます。 だからといってメニュー一つ一つに on(rollOver){ stop(); } on(rollOver){ play(); } を記述しても、マウスオーバーしているメニューだけが止まって、 他のメニューは動いてぐちゃぐちゃになってしまいます。 ひとつのメニューをマウスオーバーするだけで他全部のムービークリップも停止、 マウスをはずすと同じ所から動きだす事って出来ますか? いい方法がありましたら教えて下さい。

  • ボタンサウンド 

    ムービークリップでボタンを作っているのですが、アップ、オーバー、ダウン、アウト各20フレームずつです。オーバーにだけサウンドを入れたいのですが、オーバーの始まるフレームに、サウンドを指定して入れているのですが、クリックしても、音がなってしまうのですが、クリックしても音が鳴らないようにするには、どうしたらいいでしょうか?よろしくお願いいたします。

    • ベストアンサー
    • Flash
  • Flashマウスオーバー

    Flashで、ループが一回の小さなムービーを流し、 その上にマウスを合わせると(クリックではなくオーバーのみ)、別の絵が表示されてストップし、またマウスを外すと元のムービーがはじめから流れるものを造りたいのですが、ボタンシンボルで造ると、マウスを外してもムービーが最初からは始まりません。 ボタンシンボルを使わずにon(release)のような記述で、クリックではなくマウスオーバー時に反応させるにはどうしたらよいのでしょうか? 良いアドバイスがあれば教えてください。 宜しくお願いします。

  • flashメニューボタン

    flashでメニューボタンを制作しているのですが…。 (マウスオーバーの時に徐々に明るくなるような感じで) メニュー内で他のページに飛んだ時にそのページのボタンをマウスオーバー時のときのように色を変えたいのですが何か良い方法はありますか? サイトはオールFLASHではなく、メニュー(ヘッダー)だけFLASHです。

  • フラッシュでバナーボタンを作るには?

    バナーボタンをGIFアニメでなく、フラッシュで作りたいのですが、作り方が間違っているせいかちゃんとリンク先にとびません。というか、ボタンにもなっていません... (イメージのバナーボタンは常にアニメーションで動いていて、カーソルを合わせてクリックすると新しいウインドウがでてリンクするという感じです。) 間違っていると思われる作り方を参考に書きます。 (1)シーン1でムービーを普通に作る→ (2)そのシーン全部のレイヤーを選択して「シンボルに変換」でムービーに変換する→ (3)新規のシーンをつくり、新規ボタンシンボルをつくる→ (4)アップからヒットフレームまで全てに(2)でつくったムービーをいれる (こうすれば、常に動いているかなと思いました)→ (5)(3)のシーンに戻りボタンのグラフィック自体にアクション「getURL」を設定する→ (6)パブリッシュプレビューでみると(1)で作ったアニメーションは動いているが 完全にボタンになっておらず、(1)のはじめの方のフレーム分が動いている時のみカーソルが指先に変わる(ボタンに一瞬なっている?)だけで、その先のフレーム分の動きになるとカーソルも変わってしまう。 う~ん、フラッシュバナーなんてとっても簡単なのかと思っていましたが難しいっ!ちなみに「FLASH5」をつかっています。参考になるURLだけでもいいので、どなたかお分かりになる方、是非教えてくださいっ!

  • ≪FLASH≫マウスオーバーすると、上に説明が出るボタン

    初心者です。参考書を読んで、FLASHのだいだいはわかりますが、実践はまだというところです。 それで、このようなFLASHを作りたいんですが、作り方を教えてくれませんか? それは、Webで使うメニューで、縦長で、マウスオーバーすると、文字が青くなり、真上(10pxくらい上)に説明が出るものです。 それで、1つ1つの項目はボタンで作りました。 アップに黒い文字、オーバーに青い文字をいれました。 シンプルボタンをオンにすると動作しました。 でも、説明はどうやっていれたらいいのかわかりません。 ボタンのオーバーに説明のテキストを入れると、オーバーしているときのボタンの範囲が上に広がってしまって、マウスを上に移動したとき、上にある項目のボタンが動作しません。 お願いします。

  • マウスオーバーでリンク

    ・フレームページ.html ・メニューページ.html ・メインページ.html ・リンク先ページ.html 上記のようにページを用意しメニューページには画像を設置。 画像はイメージマップを使用し、マウスオーバーでメインページをリンク先ページにリンクし、マウスアウトでメインページに戻る、クリックでリンク先ページ。 というふうにしたいのです。 可能かどうかもわかりませんが、よろしくお願いします。

  • FLASH5で、ボタンにロールアウト時にもアニメーションさせたい

    FLASH5を使用しているのですが、ボタンにマウスのロールオーバーで アニメーションを設定することはできますが、ロールアウトしたときにも アニメーションを設定したい場合、どのような方法があるか教えていただきたいです。 今私が作りたいのは「何もないところにロールオーバーするとボタンがゆっくり表示され、 ロールアウトするとゆっくり消える」というものです。 現時点では、私はムービークリップの中にボタンを入れ、最初のフレームで フレームアクションに stop (); を設定し、そこに配置してあるボタン(ここでは、透明なボタン)に on (rollOver) { play (); } で次のフレームに行くようにし、そこでロールオーバー時のアニメーション(ゆっくりボタンが現れる) を作成して、止めたいところでフレームアクションに stop (); を設定し、その停止時に配置してあるボタン(表示されている可視状態)に on (rollOut) { play (); } を設定し、その次のフレームからはロールアウト時のアニメーション(ゆっくりボタンが消える) を作成しています。 これだと、動作はするのですが メニュー等のようにボタン(この場合はボタンを含んだ ムービーですね)を隣接させて複数置いた場合などに on (rollOut) { play (); } のスクリプトがうまく効かず、他のボタンにロールオーバーしているにも関わらず前にロールオーバーした ボタンがそのままの状態(ボタンが消えず表示されたままの状態)で残ってしまいます。 tellTargetとifを使用するのかな?とも考えたのですがよくわからず困っています、、、、 長文で申し訳ないのですが、よろしくお願いします。