こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

ムービークリップ(以下mc)を複製したときの深度の設定で困っています。

ムービークリップ(以下mc)を複製したときの深度の設定で困っています。

使用ソフト:Adobe Flash CS4 professional
flashのバージョン:flashlite1.1

duplicateMovieClip(コピー元mc名,新mc名,深度(例えば10など));

と書いてmcの複製はしっかりできているのですが、深度を「レイヤー内で一番上」に設定したいのですが、どう設定していいかわからず困っています。

通常、レイヤーが3つある場合、重ね順で言うと一番上のレイヤーが最前面に、一番下のレイヤーが最背面に設定されています。
そこで、一番下のレイヤーに上記プログラムを書いて一番下のレイヤーにmcを複製したいのですが、複製したmcは一番上のレイヤーよりも最前面に配置されてしまうのです。

duplicateMovieClipを書いているレイヤー内で最上位に配置したい場合、深度にどのような設定をすればいいか教えてください。

投稿日時 - 2010-04-30 17:06:12

QNo.5862090

困ってます

このQ&Aは役に立ちましたか?

15人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

#1です。

すみません。
> flashのバージョン:flashlite1.1
と書かれていらっしゃるのを
#1の書き始めは意識していてわかっていたつもりですが,
最後の方は意識から飛んでいました。

※とりあえず重要なのは#1で書いた内容ですから
 #1から読んでください。


#1の結論で書いた
attachMovie() は FlashLite 1.1 では使えません。



duplicateMovieClip() では階層(ムービークリップ)を飛び越えることはできないわけですから,
「最初から複製元のムービークリップも,ターゲットとするムービークリップ内に作成する必要がある。」
というのが FlashLite 1.1 の場合の回答になります。
つまり,
複製したいムービークリップを,何某かのムービークリップ内に作成して,
そのムービークリップ内で duplicateMovieClip() する必要があります。

その方法でないと,
レイヤーを選ぶことはできません。

投稿日時 - 2010-04-30 21:56:32

ANo.1

話は複雑ですからゆっくり読んでください。


「レイヤー」 というものは 「手動でものが作成できる(配置できる)範囲」 ですよね。
この手動でものが作成できる(配置できる)深度は,負の数なんです。
-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

投稿日時 - 2010-04-30 21:48:38

あなたにオススメの質問