- ベストアンサー
表示順を変更したいのですが、、
ボタンAとボタンBが重なったときに、ある場合はボタンAが上に、ある場合はボタンBを上に表示したいのですが、どうすれば良いでしょうか。 また、レイヤーごと表示順序を変更する方法はあるでしょうか?
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
ムービークリップならできます。 ボタンA も ボタンB もムービークリップで作成します。 または, ボタンA も ボタンB もそれぞれ別のムービークリップの中に入れます。 そして, MovieClip.swapDepths() を使えば深度を入れ替えることができます。 たとえば, _root(メインムービーのステージ上)に2つのムービークリップがあったとします。 一方に「A_mc」,もう一方に「B_mc」というインスタンス名を付けたとしておきます。 _root ├ A_mc └ B_mc --------- 「A_mc」に次のように書くと,「A_mc」にロールオーバーしたとき「B_mc」と深度が入れ替わります。 どっちが上にあるとか下にあるとかは関係なく,とにかく深度が入れ替わります。 on (rollOver) { this.swapDepths(_root.B_mc); } 「B_mc」に次のように書くと,「B_mc」にロールオーバーしたとき「A_mc」と深度が入れ替わります。 これもどっちが上にあるとか下にあるとかは関係なく,とにかく深度が入れ替わります。 on (rollOver) { this.swapDepths(_root.A_mc); } --------- 「A_mc」に次のように書くと,「A_mc」にロールオーバーしたとき深度0と入れ替わります。 これによって「B_mc」より上に表示されます。 on (rollOver) { this.swapDepths(0); } 「B_mc」に次のように書くと,「B_mc」にロールオーバーしたとき深度0と入れ替わります。 これによって「A_mc」より上に表示されます。 on (rollOver) { this.swapDepths(0); } --------- Flash や ActionScript のバージョンを書かれていらっしゃいませんが。 上のようにムービークリップ自体に on() イベントハンドラ を書いて, その中で MovieClip.swapDepths() メソッドが使えるのは, Flash MX 以上で,ActionScript1.0 or 2.0 のみです。 (Flash MX以上とは,MX,MX2004,8,CS3 のことです。) MovieClip.swapDepths() メソッド自体は,Flash 5 でも使用できます。 ただし, on() イベントハンドラ はボタンにしか書けませんから, ムービークリップの中にボタンを入れる必要があります。 また上のスクリプトでは使用しませんでしたが, FlashMX2004以上 では, MovieClip.getNextHighestDepth メソッド で, そのムービークリップがある最高深度のさらに1つ上の深度を得ることができます。 これを使うとムービークリップをその時の最上深度に持っていくようなこともできます。 (getNextHighestDepth は使わなくてもできますけどね,これを使うと簡単にできますということです。) ◎ ちょっと補足 ---深度について--- 深度はオブジェクトの上下関係です。 ムービークリップに指定できる深度の範囲は -16384 から 1048575 までの整数です。 深度の数値が大きいものほど,上(手前)に表示されます。 レイヤー上に手動配置したものは, 深度 -16384 ~ -1 までの範囲で, 下から(-16384から)順にだいたい詰めて自動的に深度が割り振られます。 手動では深度 0 以上に何かを配置することはできません。 深度0 ~ 1048575 までの範囲は, ActionScriptによってのみムービークリップなどを配置できます。 したがって, 深度 0 未満の範囲では手動もしくはActionScriptで物を配置でき, 深度 0 以上の範囲は,ActionScriptのみで物を配置できるということになります。 swapDepths の場合は, 深度を入れ替えるのでActionScriptを使用して操作してもかまいませんが, attachMovie() や,createEmptyMovieClip() などによって, 新たに何かをステージ上に配置する場合は, 深度 0 以上に配置するのが原則となっています。 同じ深度に重複してムービークリップなどを配置すると, 前にその深度にあったものの居場所がなくなって消えてしまうからです。 手動で配置したものの深度は自動で割り振られるので, 普通は把握・管理していないはずです。 何も考えずに深度 0 未満に何かを作成すると, あるべきはずものが消えてしまうおそれがあります。 ================== > レイヤーごと表示順序を変更する方法はあるでしょうか? FLAファイルであるうちはできます。 しかしSWF にパブリッシュした後は, レイヤーはオブジェクトではないので順序を変えることはできません。 逆ですよ。 レイヤーは深度のようなもので,喩えるなら「標高」です。 太郎君が標高 100m の山の中腹にいて, 花子さんが標高 200m の山の山頂にいたとします。 花子 標高200…山頂 太郎 標高100…中腹 _平地 標高0…山麓 太郎君と花子さんの上下を入れ替えたい場合, 標高は変えませんよね。 「山の中腹の標高を 200m にして,山頂の標高を 100m にする。」 いったいそれはどんなことか想像もできませんし, 普通は,そんな妙なことをしようとは考えないと思います。 太郎君と花子さんの上下を入れ替えたいのでしたら, 標高を入れ替えるのではなくて, 太郎君を標高 200m の山頂につれて行って, 花子さんを標高 100m の中腹に戻します。 レイヤーを変えることはできませんが, レイヤーに乗っているものの深度は入れ替えられます。 具体的には, 1つのレイヤーに乗っているものをムービークリップで作成して, 最初に書いたように swapDepths すればできます。 もし, 1つのレイヤーでモーショントゥイーンを作成しているとすれば, そのモーショントゥイーンごと1つのムービークリップの中に作成してしまうとできます。
お礼
ムービークリップにしたらできました。 ありがとうございました。 返信、大変感謝です。