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

Flashのみでホームページを制作中なのですが、そこで一つ問題が生じてしまいました。
考えてもなかなか解決しません。どなたか教えてください。

メニューボタンが3つと、それを押すと各々3つのページ(3シーンに分けてあります)にジャンプするように作ってあります。
ボタンはどのページでも常に同じ位置にあります。

このボタンのマウスオーバーのフレームのみに「ボワ~ン」というサウンドをいれました。
マウスカーソルを3つのボタン上でなでるようにすると「ボワ~ンボワ~ンボワ~ン!」となる感じです。
サウンドに関してはそれだけでよかったのですが、ここからが分からなくなりました。

ボタンをクリックすると、希望のシーンにジャンプします。
それでも見た目上は、メニューボタン部分にはまったく変化がありません。
なのに、構造的にはシーンのジャンプが行われているわけで、
そうすると、ボタンをクリックしたまま、そのボタン上でマウスを動かさない状態でいると、
新しいページになった瞬間に、もう一度「ボワ~ン」と鳴ってしまうのです。

これを回避する方法をご存じの方、いらっしゃいませんか?

基本的にボタンのマウスオーバーフレームにサウンドを割り当てたのが、いけないのでしょうか?

アクションスクリプトのオブジェクト用のもので、なにか使えるものはないでしょうか?
たとえば、「オンマウスオーバー」の設定かなにかで、指定の範囲外から範囲内へのアクセスのみに反応して、
マウスカーソルがもともと範囲内に会った場合には無反応、といったようなアクションをご存じの方いませんか?

よろしくお願いします!

A 回答 (8件)

こんばんは。


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

この回答への補足

こんばんは、humourさん。
「どうしても」そうしたいのです。(未熟者のわがままか…)

マウス位置の検知かなにか、そういったスクリプトでなら出来ますか?
どうでしょう?

なんでもいいです、アドバイスよろしくお願いします。

補足日時:2002/04/04 01:12
    • good
    • 0

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


場合によってはうまくいくはずです。
    • good
    • 0
この回答へのお礼

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

お礼日時:2002/04/04 23:16

それは、別のシーンに移動しても同じところに同じボタンが配置されている


からでしょうね?

そのようなことをしたい場合、ボタンごとに別のシーンへリンクするような
形にしたいのであれば、同じボタンを配置したときに、ボタンを「編集」で
グラフィックに代えてあげればいいでしょう。

<シーン0>   <シーン1>    <シーン2>    <シーン3>

ボタン1      グラフィック   ボタン1      ボタン1
ボタン2      ボタン2      グラフィック   ボタン2
ボタン3      ボタン3      ボタン3      グラフィック

意外と見栄えのよいフラッシュのホームページでも
このような、シンプルな構造で作成しているものも多いものです。

どうしてもスクリプトを使いたいという人は、それでもいいですが、
発想の仕方で、無理をする必要はありません。

また、なかなかこのようなテキストの意見交換の場では、教えるにも
限界がありますので。
    • good
    • 0
この回答へのお礼

Qsansさん、こんばんは。
具体的なご回答ありがとうございます。
それから…

>発想の仕方で、無理をする必要はありません。

こういったご意見、本当にホッとします。
一人で考えていると、あれよあれよという間に煮詰まってしまい、挙げ句は「ポカーン」としてしまう始末なものですから。

参考にさせていただきます。
ありがとうございました。

お礼日時:2002/04/04 23:37

補足



<シーン0>   <シーン1>   <シーン2>   <シーン3>

ボタン1      音なしボタン   ボタン1      ボタン1
ボタン2      ボタン2      音なしボタン   ボタン2
ボタン3      ボタン3      ボタン3      音なしボタン

グラフィックのところを「音なしボタン」にすればいいのです。

ボタンを複製して、「音あり」「音なし」の二つを用意することです。

このようなことをすれば、いろいろ応用できます。
    • good
    • 0
この回答へのお礼

Qsansさん、ご丁寧にありがとうございます。

>ボタンを複製して、「音あり」「音なし」の二つを用意することです。

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

お礼日時:2002/04/05 00:04

またまた、回答しちゃいますが...



omokawaさんの使用しているバージョンにもよりますが

アクションスクリプトの中でテルターゲット(tell target)を
使えば、バリエーションは増えます。

比較的tell targetは、応用しやすいです。

ムービーの中にボタンを配置して利用するときなどです。

もちろんtell targetというぐらいですから、ムービーに「インスタス名」
を付けなければなりません。

また、ムービーの中にムービーを入れたりするときに生じる「パス名=階層」
を理解する必要もあります。

たとえば、フォルダの中のさらにフォルダの中にあるファイル名を指定する
のと同じ原理です。

以上のように、簡単なアクションスクリプトは、抑えていて損は無いと思います。

また、あまり、シーン別に区切るということだけを考えずに、
同シーン上だけでも工夫すれば、収まります。

ひとつのレイヤー上で、初歩的なアクションスクリプト「goto」「stop」などを使って、キーフレームごとに、擬似シーンを作ることです。

<例>
。=空白のキーフレーム(フレームアクションを設定できます)

。<擬似シーン1>----。<擬似シーン2>---。<擬似シーン2>---。

といった感じですが...

以上、参考になれば幸いです。がんばってください。
    • good
    • 0
この回答へのお礼

Qsansさん、こんにちは。

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

お礼日時:2002/04/09 17:21

アクションスクリプトを勉強しはじめたばかりの者なので、ちょっと足元はおぼつかないのですが、私が見つけたやり方を紹介します。

(ただし、後述しますが、欠点があります)。フラッシュのバージョンは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(); //カーソルがのったら音を鳴らす
}
    • good
    • 0
この回答へのお礼

hokuto_dsさん、こんにちは。

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

お礼日時:2002/04/09 17:39

すみません、なぜか途中までしか入らなかったので、下の回答のつづきです。



[スクリプト表記](//以下は、コメントです。そのままペーストしても問題ないです)
●一番最初のフレームに
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など使うともっと別の方法で可能かも、などとも思うのですが、ひとまずの回避策です。考え方の参考になればさいわいです。
    • good
    • 0
この回答へのお礼

hokuto_dsさん、続けてこんにちは。

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

ありがとうございました。

お礼日時:2002/04/09 17:50

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"を参照する点を注意してください。
ただ、なぜかこの方法をためしてみたところ、シーンをジャンプするためのボタンアクションがどうも動かない‥‥;;フレームジャンプは問題ないのに‥‥。。バグなのか、私の指定のしかたに問題があるのか、ほかのケースでも、フレームジャンプは問題ないのに、シーンジャンプになるとお願いもしてないような動きをするボタンがいる‥‥‥‥;;;
ので、このあたりは、使う場合は、おためしください。
    • good
    • 0
この回答へのお礼

hokuto_dsさん、こんにちは。

ご親切な回答、本当に感謝します。
お教えいただいた一連の作業、まだ試してはいません(すみません…)が、これらは私にとって、とても貴重で重要なものです。
なんとも恐縮のほかはありません。

>シーンをジャンプするためのボタンアクションがどうも動かない‥‥

これは、もしかしたら、ムービークリップ内における、親タイムラインの認識方法に「シーン名」が存在しないからではないでしょうか?
「ラベル名」のみにするといいのかも…、試してみます。

それでは、hokuto_dsさん、本当にどうもありがとうございました。
詳細なご回答に個人教授を受けたような気分になりました。

お礼日時:2002/04/09 18:37

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