- ベストアンサー
auサイトのスライドメニューFLASHについて
- auサイトのようなスライド形式のメニューを作成しています。メニューの開閉がスムーズに動作するが、コンテンツボタンの動作に問題がある。
- ロールオーバーしたときにメニューをスライドさせ、その後にコンテンツメニューを表示するが、コンテンツボタンにロールオーバーするとメニューが閉じようとする現象が発生する。
- auサイトのようにメニューがクローズアップされ、コンテンツボタンも正常に動作する方法はないか。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
#1&2です。 どこで詰まっていらっしゃるのか,結局よくわかりませんが, とりあえず hitTest の方を使用するわけですよね。 #1の補足で,そこまでは理解出来ました。 一度, メニューMC自体は動かさないという, 止まったところで考えれば良いのではないでしょうか? 注意する点としては hitTest は,ムービークリップクラス の hitTest メソッド, MovieClip.hitTest() http://livedocs.macromedia.com/flash/8_jp/main/00002475.html もしくは,ビットマップデータクラスの hitTest メソッド, BitmapData.hitTest(); http://livedocs.macromedia.com/flash/8_jp/main/00001958.html ですから, 小さいボタンもムービークリップで用意する必要があります。 メニューMC内のタイムライン [メニューMC] ラベル名 | out | over □ レイヤー筆・・|○ []|●//[]| ←ボタン(MC) □ レイヤー筆・・|●////////[]| ←塗りや写真 メニューMC 内 フレームラベル over 時の ステージを見たときの例↓ ┌────メニューMC─────┐ ↓ボタンMC×3 □□□□□□□□□□□□□□□ □□□□□□□■■■■□□□□ □□□□□□■■■■□□□□ □□□□□□□□□□□□□□ □□□□□□■■■■□□□□ □□□□□□■■■■□□□□ □□□□□□□□□□□□□□ □□□□□□■■■■□□□□ □□□□□□■■■■□□□□ □□□□□□□□□□□□□□ 最初,「メニューMC」の中にはボタンは表示されていない状態です。 つまり,「メニューMC」の フレーム1 に「ボタンMC×3」は存在していません。 そして, 「メニューMC」に ロールオーバー すると, 「メニューMC」内のフレームが移動して,「ボタンMC×3」が存在するフレームに達するわけです。 そのときに,「ボタンMC×3」のスクリプトが有効になれば良い。 ただそれだけのことでしょう。 「ボタンMC×3」には, 上から順に 「btnMC1」,「btnMC2」,「btnMC3」というインスタンス名を付けたとしておきます。 メインムービーの編集に戻って, 「メニューMC」を選択して,そこに次のようなスクリプトを書けば良いと思います。 ----------------------------------- // この メニューMC が表示されたとき onClipEvent (load) { // メニューMC 内のフレームをストップ this.stop(); } // // この メニューMC に ロールオーバー したとき on (rollOver) { // フレームラベル "over" に移動 this.gotoAndStop("over"); } // // この メニューMC から ロールアウト したとき on (rollOut, dragOut) { // フレームラベル "out" に移動 this.gotoAndStop("out"); } // // この メニューMC をクリックしたとき on (release) { // もし btnMC1 がマウスカーソルとヒットしていれば if (this.btnMC1.hitTest(_root._xmouse, _root._ymouse, true)) { // 何か動作させる getURL("001.html"); } // もし btnMC2 がマウスカーソルとヒットしていれば if (this.btnMC2.hitTest(_root._xmouse, _root._ymouse, true)) { // 何か動作させる getURL("002.html"); } // もし btnMC3 がマウスカーソルとヒットしていれば if (this.btnMC3.hitTest(_root._xmouse, _root._ymouse, true)) { // 何か動作させる getURL("003.html"); } } ----------------------------------- 最初にも書きましたが, これは,「メニューMC」自体は動き出さない, 止まったところでの場合のスクリプトです。 「メニューMC」自体を動かすスクリプトはどうされているのかわかりませんから, 答えられませんし,この件とは関係ありませんね。 「メニューMC」内のフレームを移動させて, そこにある「ボタンMC×3」のボタンをクリックする場合についてだけのスクリプトです。
その他の回答 (2)
#1です。 > 肝心のコンテンツボタンは、スライドしたとき(ラベル名:overになった時)のみ > 表示させたいのですが、これが上手く動作しません。 と書かれていますが,全体像が把握できないため何とも言えません。 http://www.alpha-dental.jp/innai/innaisyoukai.htm ↑ココが似たような手法を取り入れていますが, こういう方法ではだめなのでしょうか? そのページは, 「クリック( on(release) )」と同時に,コンテンツMC自体が移動するとともに,その中が動きます。 つまり,MCの「クリック( on(release) )」と同時に, MC内を play(); させているのです。 つまり単純に, 「クリック( on (release) )」 ではなく, 「ロールオーバー( on (rollOver) )」 で, play(); させれば良いだけではないでしょうか。 on (rollOver) { this.play(); } 柔軟に考えてください。 hitTest なんかにこだわる必要は全くありません。
補足
>全体像が把握できないため何とも言えません。 わかりにくい説明でごめんなさい。 目指しているのは、本当にauサイトのトップページにあるFLASHそのものなんです。 auの場合は、5つのメニューMCが重なっている状態であり、マウスカーソルを当てるだけでスライドします。 (ここまでは問題なく作成できました) 更にスライドしてから、メニューMC内にコンテンツボタンが出現します。 カーソルを外すと、まずコンテンツボタンが消えて、そして最後にスライドして閉じます。 ↑↑↑ これを実現させたいのですが上手くいかずに困っています。 今の状態では、メニューMCにカーソルを当てるとスライドして開きコンテンツボタンが出現します。 しかし、コンテンツボタンにカーソルを合わせた瞬間に、コンテンツボタンが消えて、現れてを交互に繰り返します。 コンテンツボタンに「rollOve」した瞬間に、大ボタンでは「rollOut」になり、これを繰り返している為だと思います。 コンテンツボタン = 小ボタン [メニューMC] ラベル名|out |over 小ボタン| |●--- 大ボタン|●----------- スライドした時だけに、コンテンツボタンを表示させたいので、ラベル名(out/over)をつけて 大ボタンのrollOve/rollOutでラベル位置にgotoさせています。 基本的に作り方を間違えているのでしょうか? まさに泥沼にハマった感じで、ここから抜け出せずに困っています。 そして、文章で説明するのも下手ですみません。
その,ページのFlashに関して, 一年以上前に,回答したことがあります。 「hitTestのロールアウト判定」 http://oshiete1.goo.ne.jp/kotaeru.php3?q=1566216 ↑教えて!goo ↓OKWave (同じです) http://okwave.jp/kotaeru.php3?q=1566216 話が込み入っていますが,これ↑を簡単に言うと, こういうことです↓。 「質問:rollOverで動きながら出現し、rollOutで逆再生で消えていくメニュー」 http://oshiete1.goo.ne.jp/kotaeru.php3?q=2098181 ↑教えて!goo ↓OKWave (同じです) http://okwave.jp/kotaeru.php3?q=2098181 良かったら参考にしてみてください。 もしくは,上のURLで質問者の方が書かれているように, hitTest を使うかです。 hitTest でする方法に関しては, ここ↓で#1の回答者の方が詳しく方法を書かれています。 「質問:onClipEvent(load)かhitareaの問題かと・・・わからない」 http://oshiete1.goo.ne.jp/kotaeru.php3?q=1506352 ↑教えて!goo ↓OKWave (同じです) http://okwave.jp/kotaeru.php3?q=1506352
補足
コンテンツボタンがスライドの有無に関わらず、常に表示する場合は下記のようにして 教えて頂いた「hitTestのロールアウト判定」にあるように、小ボタンにも大ボタンと同じ「rollOver」の処理を記述することで実現できました。 メニューMC---スライドする1つのメニュー 大ボタン---透明ボタン 小ボタン---コンテンツボタン [メニューMC] 小ボタン|●----------- 大ボタン|●----------- しかし、肝心のコンテンツボタンは、スライドしたとき(ラベル名:overになった時)のみ表示させたいのですが、これが上手く動作しません。 [メニューMC] ラベル名|out |over 小ボタン| |●--- 大ボタン|●----------- 「hitTest」を使えば上記の方法は可能なのでしょうか?
お礼
私は大きな勘違いをしていました。 メニューMCに記述すべきスクリプトをスライド時に表示されるボタンMCの方に記述してしまっていました。 大変、お騒がせしました。 長い間、お付き合いして頂いたし、すごく丁寧に教えて頂いたし、本当に感謝しています。ありがとう!! Flashを勉強中なので、またココで「sassakunさん」にお世話になるかもしれません。その時はまた宜しくお願いします。