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

[au]
http://www.au.kddi.com/

auサイトにあるようなスライド形式のメニューを作成しています。
スライドしてスムーズに開く仕組みは出来ましたが、開いたときに現れるコンテンツボタンがうまく機能しませんので質問させて頂きます。

重ねて表示しているメニューの1つ1つは複数のMCで作成しており、それぞれロールオーバーとロールアウトでスライドを制御しています。
ロールオーバーになったときにメニューを大きくスライドさせてから、コンテンツメニューを表示しますが、ここで問題があります。

ロールオーバー設定をしているメニューMCの上に、コンテンツボタンMCを設置することになるので上手く機能しません。
MCボタンの上にMCボタンがあるような状態です。
症状としては、コンテンツボタンにロールオーバーすると、開いていたメニューMCが閉じようとする現象が発生します。

auサイトのようにメニューがクローズアップされて、コンテンツボタンにも問題なく動作するようにしたいのですが何かよい方法はありませんか?
宜しくお願いします

A 回答 (3件)

#1&2です。



どこで詰まっていらっしゃるのか,結局よくわかりませんが,
とりあえず hitTest の方を使用するわけですよね。
#1の補足で,そこまでは理解出来ました。

一度,
メニューMC自体は動かさないという,
止まったところで考えれば良いのではないでしょうか?

注意する点としては hitTest は,ムービークリップクラス の hitTest メソッド,
MovieClip.hitTest()
http://livedocs.macromedia.com/flash/8_jp/main/0 …
もしくは,ビットマップデータクラスの hitTest メソッド,
BitmapData.hitTest();
http://livedocs.macromedia.com/flash/8_jp/main/0 …
ですから,
小さいボタンもムービークリップで用意する必要があります。

メニュー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」のボタンをクリックする場合についてだけのスクリプトです。
    • good
    • 0
この回答へのお礼

私は大きな勘違いをしていました。
メニューMCに記述すべきスクリプトをスライド時に表示されるボタンMCの方に記述してしまっていました。
大変、お騒がせしました。
長い間、お付き合いして頂いたし、すごく丁寧に教えて頂いたし、本当に感謝しています。ありがとう!!
Flashを勉強中なので、またココで「sassakunさん」にお世話になるかもしれません。その時はまた宜しくお願いします。

お礼日時:2006/10/02 11:07

#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させています。


基本的に作り方を間違えているのでしょうか?
まさに泥沼にハマった感じで、ここから抜け出せずに困っています。
そして、文章で説明するのも下手ですみません。

補足日時:2006/09/29 10:29
    • good
    • 0

その,ページの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」を使えば上記の方法は可能なのでしょうか?

補足日時:2006/09/28 11:04
    • good
    • 0

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