- 締切済み
ムービークリップ(以下mc)を複製したときの深度の設定で困っています。
ムービークリップ(以下mc)を複製したときの深度の設定で困っています。 使用ソフト:Adobe Flash CS4 professional flashのバージョン:flashlite1.1 duplicateMovieClip(コピー元mc名,新mc名,深度(例えば10など)); と書いてmcの複製はしっかりできているのですが、深度を「レイヤー内で一番上」に設定したいのですが、どう設定していいかわからず困っています。 通常、レイヤーが3つある場合、重ね順で言うと一番上のレイヤーが最前面に、一番下のレイヤーが最背面に設定されています。 そこで、一番下のレイヤーに上記プログラムを書いて一番下のレイヤーにmcを複製したいのですが、複製したmcは一番上のレイヤーよりも最前面に配置されてしまうのです。 duplicateMovieClipを書いているレイヤー内で最上位に配置したい場合、深度にどのような設定をすればいいか教えてください。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- BlurFiltan
- ベストアンサー率91% (1611/1754)
#1です。 すみません。 > flashのバージョン:flashlite1.1 と書かれていらっしゃるのを #1の書き始めは意識していてわかっていたつもりですが, 最後の方は意識から飛んでいました。 ※とりあえず重要なのは#1で書いた内容ですから #1から読んでください。 #1の結論で書いた attachMovie() は FlashLite 1.1 では使えません。 duplicateMovieClip() では階層(ムービークリップ)を飛び越えることはできないわけですから, 「最初から複製元のムービークリップも,ターゲットとするムービークリップ内に作成する必要がある。」 というのが FlashLite 1.1 の場合の回答になります。 つまり, 複製したいムービークリップを,何某かのムービークリップ内に作成して, そのムービークリップ内で duplicateMovieClip() する必要があります。 その方法でないと, レイヤーを選ぶことはできません。
- BlurFiltan
- ベストアンサー率91% (1611/1754)
話は複雑ですからゆっくり読んでください。 「レイヤー」 というものは 「手動でものが作成できる(配置できる)範囲」 ですよね。 この手動でものが作成できる(配置できる)深度は,負の数なんです。 -16384 ~ -1 以下 です。 「具体的にはどの深度に配置されるんだ?」と問われると, 「誰も知らない。」という答えになります。 「レイヤーの番号」などというものとは無関係で, 下にあるもの(下にあるインスタンス)から順に 自動で -16384,-16383,-16382,… という深度が割り振られます。 --- 以上は前置きですが大変重要なことです------ > 深度(例えば10など)); その 10 は 正の数 ですよね。 正の数は手動では作成できない範囲なんです。 「レイヤー」に喩えるなら,超上の上のレイヤー で, 実際にはレイヤーでは配置できない上の上です。 0以上の深度は, ActionScript のみで,もの(ムービークリップインスタンス)を配置できる範囲なんです。 と,ここまで聞けば, 「そうか。 深度に負の数を指定すれば良いのか!」 となるかもしれませんが,それは大間違いです。 確かに ActionScript で負の数の深度にムービークリップを配置することはできます。 しかし, ActionScript では 深度10 など 0 以上の深度にものを配置すべきなのです。 何故かというと, 適当に 深度 -16380 辺りを指定したとすれば, その深度に手動で配置してあるインスタンスが,吹っ飛んで消えてしまうからです。 手動で配置したインスタンスは, 自動でその深度が割り振られますから, 誰もその深度を把握していないわけですし, モーショントゥイーンなどをかけたインスタンスであれば 「レイヤーに依存するしかない」のです。 仮に手動で配置したインスタンスの深度がわかったとしても(ActionScriptで調べればわかりますが), その下の深度に持っていくことはできないんです。 (できるが,何かが吹っ飛ぶ。 つまり管理が不可能もしくはものすごく難しくなる。) したがって, ActionScript でムービークリップを配置する深度は 0 以上で, 手動でインスタンスを配置する深度は 負の数 というエリア分けをする必要があるのです。 (「そういうルールで行こう」というものにしないと,誰も何も言えなくなる。) ですから, > 深度(例えば10など)); の 10 は正解です。 決して 負の数 にしてはいけません。 (実際はしても良いけど無茶になるのが目に見えるので自己責任で)。 となると, 残るのは,「レイヤー(手動で作成できる深度)」にムービークリップを作成して, そのムービークリップ内にActionScriptでムービークリップを配置するしかなくなります。 つまり, 配置したいレイヤーにあらかじめムービークリップを手動で作成しておいて, そのムービークリップにインスタンス名を付けて, そのムービークリップ内に ActionScriptでムービークリップを配置するということです。 しかし! ここにもまだ障壁があって, duplicateMovieClip() でムービークリップが配置できるのは,同じ階層内なんです。 同じ階層内とは,同じムービークリップ内という意味に等しいです。 メインのタイムライン,つまり _root も,広義の ムービークリップです。 (_root は ムービークリップの親玉ムービークリップ。) したがって, duplicateMovieClip() ではなく, attachMovie() で,ライブラリからムービークリップシンボルを, 目標のムービークリップ内にインスタンスとして複製する方法をお薦めします。 ↓↓↓ 「リンケージについて」 http://www.1art.jp/flash/le/lessona/lessona.htm