- ベストアンサー
動くボタンでリンク
FLASH MXです。 マウスポインタがオーバーすると色が変わるボタンをつくりました。 そのボタンをムービークリップとして、動きをつけました。 それをスクリーン上に配置して、リンクをはったのですが、 するとマウスポインタを置いても色がかわらなくなってしまいました。 どうしてなんでしょうか。おしえてください。 前の質問にあった、リンクで、透明ボタンの方法を試しましたが、うまくいきませんでした。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
色の変わるボタンをボタンシンボルで作り、このボタンをムービークリップに変換、つまり、ムービークリップの中にボタンインスタンスが含まれている状態、ということでしょうか? ステージにムービークリップのインスタンスを置き、このインスタンスに on アクションを設定すると、ムービークリップ全体がヒット領域(マウスが反応する部分)になります。 ユーザーにはボタンにカーソルを合わせているように見えても、Flash の内部では、これはボタンではなくムービークリップで発生したマウスイベントと見なされます。ムービークリップ内のボタンではマウスイベントが起きていないことになりますから、「オーバー」のフレームに切り替わらず、色は変化しなくなります。 ムービークリップに透明なボタンを重ね、そのボタンに on アクションを設定した場合も、同様の理由でボタンの色は変わらなくなります。 透明なボタンに on アクションを設定した場合は、透明なボタン全体がヒット領域になります。クリックすると透明なボタンのイベントとして press (または release )イベントが発生し、リンク先は表示できます。しかし、その下の本来のボタンではマウスイベントが発生せず、「オーバー」のフレームに切り替わらないので、色は変化しません。 解決策ですが。 要するに、ムービークリップではなくその中のボタンがヒット領域になればいいわけです。 ムービークリップに配置したボタンに直接 on アクションを設定して、getURL を入れてみてください。ボタンがヒット領域になり、色も変わるようになると思います。 ボタン以外の場所(透明なボタンまたはムービークリップ)に on アクションを設定している場合は、スクリプトを削除してください。 Flash でバナーを作る時は、ムービーのどの場所がクリックされてもリンク先を表示できるように、透明なボタンを重ねる手法がよく使われます。 バナーは、基本的にはリンク先を表示できればいいだけです。ボタンの下のムービークリップなどでマウスイベントを利用する必要はありませんから、透明なボタンを重ね、そこがヒット領域になって他のムービークリップのマウスイベントが検出できなくなっても、特に問題はありません。 また、Flash 5 では、ムービークリップでは press や rollOver / Out イベントが検出できませんでした。ボタンシンボルではできない複雑なボタンは、ムービークリップで作らざるをえませんが、そのムービークリップでは press などのイベントが検出できません。その解決策の1つとして、透明なボタンを重ねるという方法がありました。 Flash MX からは、ムービークリップに on アクションを設定して、ボタン特有のイベントだった press イベント等も検出できるようになりました。透明なボタンを重ねなくても、ムービークリップが持っている機能だけで充分対応できます。
その他の回答 (2)
- DPE
- ベストアンサー率85% (666/776)
#2です。 ムービークリップの中のボタンに on を設定し、getURL で、間違いはないと思いますが・・・ ムービーの編集画面でも、メニューの「制御」→「シンプルボタン」にチェックを入れると、カーソルを合わせた時や押した時のボタンの外観は確認できますが、ボタンに設定されたアクションの動作は確認できません。「制御」→「ムービープレビュー」で確認してみてください。 ネットにつながっていない・URLが間違っているなどの理由でページが表示されなくても、ボタンを押した時にブラウザが立ち上がれば、スクリプト自体には間違いはないと言えます。 Windows をお使いで、ブラウザで既に表示している Web ページなどがある場合は、getURL で開いたウィンドウがタスクバーの中に入ってしまって、ブラウザが立ち上がっていないように見えることもあります。 なお、ムービークリップ内のボタンに on で直接設定する方法のほかに、 on*** というイベントハンドラを使って設定する方法もあります。 この場合は、ムービークリップに配置したボタンとステージに配置したムービークリップに、それぞれインスタンス名が必要です。 仮に、ボタンを btn 、ムービークリップのインスタンス名を clip とします。 メインのタイムラインに、次のようなアクションを設定します。 (↓このスクリプトをコピーして利用する場合は、各行頭の全角のスペースを、全て半角のスペースかタブに置き換えてください。このまま使うとシンタックスエラーになります) clip.btn.onRelease = function() { getURL("http://***"); }; この方法ですと、1つのシンボルから複数のインスタンスを作る場合、それぞれリンク先を変えられるという利点もあります。 こちらを利用する場合は、ボタンに設定した on アクションを削除してください。 編集画面で「シンプルボタン」にチェックを入れてもボタンの色が変わらなくなりますが、これは正常です。「ムービープレビュー」で確認してみてください。
お礼
下記の方法でうまくいきました。ありがとうござます。 ムービークリップを作り直したら、うまくいきました。(なぜかわかりませんが) 詳しい説明でした。なぜ、ボタンとして反応しないかまでよくわかりました。
- antai
- ベストアンサー率38% (88/227)
>そのボタンをムービークリップとして とありますので、その時点でボタンじゃなくなってしまったので、ポインタがその上に来ても反応しなくなってしまったんでしょう。 >前の質問にあった... その質問がどれかはわかりませんが、その質問の質問者の方が解決されているのなら、どこか間違っているということになると思います。 少なくても、うまくできる方法が回答として掲載されていると思いますので、どこがわからなかったとか、こんな風になっちゃってうまく動かないみたいなことは書いたほうがいいと思いますよ。
お礼
ボタンとして反応しないということにはじめてきづきました。ありがとうございます。
補足
その動くボタンをステージに配置しただけだと、 ちゃんとポインタに反応するのです。 getURL()でリンクを張ったとたん反応がなくなるのです。 どうしてなんでしょう。。。(><。
お礼
この方法でできました。ありがとうございます。
補足
解決策のようにムービークリップを開いて、そのボタンに on(release){ getURL("http://・・・"); } と書けばいいのですよね? やったんですが、ボタンの色は変わるけれど、 リンクに飛ばないんですよ。。 なにか足りないのですか??