• ベストアンサー

ボタンサウンド 

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

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

  • ベストアンサー
  • DPE
  • ベストアンサー率85% (666/776)
回答No.3

遅レスかつ横から失礼いたします。 原因ですが、フレームラベルの名前に問題があると思われます。 フレームラベルを” _up ”ではなく” __up ”や” up ”などに変更して、試してみてください。 ActionScript では、” _ ”で始まる名前のものは特別な意味を持っていることが多いです。 例えば座標を保持する _x と _y 、表示 / 非表示の状態を表す _visible 、透明度(アルファ)を管理する _alpha など、Flash の動作の根底に関わっているプロパティはみな” _ ”で始まる名前が付いています。 スクリプトではありませんけれど、デバイスフォントという特殊なフォントも、名前は” _ ”で始まります。 実は、フレームラベル” _up ”” _over ”” _down ”にも特別な意味があります。 この名前を付けると、スクリプトで制御することなくムービークリップにボタンシンボルの「アップ」「オーバー」「ダウン」のフレームに相当する機能を実装することができます。 詳しくはヘルプに載っていますので、ご参考になさってください。 LiveDocs ではこちらのページになります。 (↓少々重いのでご注意ください)  ・ Flash ドキュメンテーション   ActionScript 2.0 の学習:イベントの処理 - ボタン状態を持つムービークリップの作成   http://livedocs.macromedia.com/flash/8_jp/main/00001382.html **************************** ご参考になさったというサンプルでは、ボタンとして使うムービークリップのインスタンスに on(release){ } というスクリプトが設定されていますよね。 on(release) で書いたスクリプトは、”インスタンスをクリックして、インスタンス上でマウスボタンを離した時”でなければ実行されません。 このムービークリップの on(release) に続く { } 内にスクリプトは何も書かれていないし on(rollOver) なども全く見当たらないのですから、普通に考えますと、マウスカーソルを重ねようがクリックしようが、何も変化しないような気がします。 ところがこのムービークリップは、マウスカーソルを重ねると黄色に変化します。 黄色に変わるということは、フレームラベル” _over ”が付いているフレームが再生されているということです。 更にクリックしてみると、黒に変わる・・・つまり” _down ”のフレームラベルを持つフレームが再生されていることが分かります。 rollOver や release イベント等を利用するスクリプトも書いていないのに勝手にフレームが切り替わるのは、” _ ”で始まる特殊なフレームラベルの仕業なのです。 フレームラベルのこの機能は、on(press) やインスタンス名.onRelease = function ・・・など、ムービークリップでボタンとしての機能を利用するスクリプトを書いた時にだけ有効になります。 ボタンとしての機能を利用しない場合は、普通のフレームラベルと同様に機能します。 サンプルで on(release) が書かれていたのは、”ここにクリックした時の処理を書く”というひな形を置いてくれていたというよりも、これがないと特殊なフレームラベルを使った作例が正しく動作せずサンプルとして意味を成さないからではないかと思います。 ------------------------------------------------------------------ ムービークリップを、単純に絵が切り替わるボタンとして利用したいのなら、この機能は確かに便利です。 しかし、効果音を鳴らすような時には逆にアダになることがあります。 ボタンかムービークリップをクリックした時のことを考えてみてください。 一般的には、”インスタンスの上でマウスのボタンを離す”と思います。 release イベントも、この時に発生します。 (ちなみにインスタンス上でクリックしインスタンスの外でマウスのボタンを離した時は、releaseOutside という別のイベントになります) つまり、release イベントが起きた時、マウスのカーソルは必ずインスタンスに重なっています。 この状態が「オーバー」と同じと見なされ、” _over ”というフレームラベルを付けたフレームは release イベントが発生した時にも再生されます。 ボタンシンボルでも、クリックした時にインスタンスの上でマウスのボタンを離すと「オーバー」のフレームが表示されます。 しかし、on(rollOver) と trace アクションで調べると分かるのですが、実際には release イベントの直後に rollOver イベントは発生しません。 **************************** ところで、タイムラインに挿入した音は、基本的には”そのフレームに再生ヘッドが来た時に鳴る”仕組みになっています。 クリックした時にロールオーバー時の音が鳴ってしまう原因も、ここにあります。 release イベントの直後、rollOver イベントが発生したわけでもないのに「オーバー」に相当する” _over ”のフレームラベルが付いたフレームが勝手に再生されると、このフレームに設定した音も同時に鳴ってしまいます。 ・・・ということは、Flash のこの”お節介な機能”を利用せずにボタンシンボルと同じ機能を作ればいいわけです。 ボタンシンボルと同様の機能がムービークリップに実装されるのは、特別な意味を持つフレームラベルを付けた時だけです。 別の名前で ActionScript の文法に反しない名前であれば、フレームラベルは何でも構いません。 先述の通り、実際には release の後に rollOver イベントは発生しません。 on(release) や onRollOver = function ・・・でフレームを切り替えると、クリックした後でもロールオーバー時の音は鳴らなくなります。 スクリプトの考え方はそのままで構いませんが、gotoAndPlay の移動先の書き換えをお忘れなく。 **************************** ボタンシンボルは今回と同じ状況でも、「ダウン」の後で「オーバー」の絵に切り替わるにもかかわらず「オーバー」に組み込まれた音は鳴らないという、ムービークリップよりも賢い設計になっています。 他にも、同じフレームに続けて再生ヘッドをセットできないという Flash の仕様上の制約から、ムービークリップの場合はクリックするたびに音を鳴らしたいのならば、gotoAndPlay で一旦別のフレームに行ってから音を組み込んだフレームに戻るようにしなければなりません。 その点ボタンシンボルは、クリックするたびに「ダウン」のフレームが再生され、その都度効果音も鳴ります。 この点もムービークリップより優れた設計だと思います。 Flash Player 6 以降はムービークリップにもボタンとして使える機能が加わりましたが、ボタンシンボルと全く同じではありません。 単純なボタンであればボタンシンボルの方が扱いやすいこともあるので、状況に応じて使い分けてください。

botasblk
質問者

お礼

いつも、詳細かつ的確なアドバイスと回答、本当にありがとうございます。ラベル名をかえるだけで無事、音が正常に動作致しました。

その他の回答 (2)

  • umioyo
  • ベストアンサー率66% (35/53)
回答No.2

状況がいまいち不明ですが、押したときに鳴るようにしたいということでしょうか。 onReleaseはマウスを押して、離した時に起こるイベントなので、onPressにすれば押したときに音を鳴らすことができると思います。

botasblk
質問者

補足

http://homepage3.nifty.com/ginga-b/MX/btnmc.html ここの作り方で制作したのですが、_overと_downそれぞれ別のサウンドを入れます。サンプルファイルで試してみれば分かるのですが、離すときに,_overに入れたサウンドが鳴ります。pressに変えても同様です。

  • umioyo
  • ベストアンサー率66% (35/53)
回答No.1

ちょっとこれだけの内容では返信難しいです。 せめてover時とclick時のソースを記述するなりしてください。

botasblk
質問者

補足

button.onRelase = function(){ button.gotoAndPlay("_down"); }; button.onRollOver = function(){ button.gotoAndPlay("_over"); }; _over時に1というサウンド_down時に2というサウンドを入れているのですが、_down時に2が鳴り(ボタンを押したままの状態)、ボタンを離すと、1がなります。この離したときに鳴る1を鳴らさないようにするにはどうしたらよろしいですか? 説明が下手で申し訳ございませんが、よろしくお願いします。

関連するQ&A