- ベストアンサー
ムービークリップが残る
ムービークリップが,シーンをまたいで残ってしまうというのはどんな原因が考えられるでしょうか。 シーン1に置いているムービークリップなのですが,ドラッグの設定をしています。ドラッグをするとなぜかシーン2のほうに表れてしまいます。どうしてでしょうか。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
#1です。 私,立派な(?)オヤジですので, swapDepth() のようなエロい ActionScript について真剣に訊かれると照れてしましますが, ちょっと(かなりハードに)エッチな言葉に,スワッピング(swapping)という言葉があります......よね? swapDepth() とは要するにそういうことです(゜_゜i)\(-.-メ) オイオイ。 半分冗談なのですが, swapDepth() は,つれあいを交換するのではなく,深度を交換するのです。 (スワッピング について知らない場合は調べなくて良いですよ。大したことはありません。) ---------- ( ̄+++θ ̄) 口チャック --------- swapDepth() で交換する 「深度」 とは, ステージ上に表示されているものの上下関係の深さの値です。 目で見える範囲ではレイヤーの上下関係のようなものが深度です。 深度は -16384 から 1048575 の範囲があって,数値が上のものほど上に表示されます。 1048575 上 : : -16384 下 仮に a_mc というインスタンス名のムービークリップと, b_mc というインスタンス名のムービークリップが同じ _root にあったとします。 上のレイヤー … a_mc 深度大 下のレイヤー … b_mc 深度小 この状態で, // a_mc の深度を b_mc の深度と入れ替える a_mc.swapDepths(b_mc); を実行すると, a_mc と b_mc の深度が入れ替わります↓。 上のレイヤー … b_mc 深度大 下のレイヤー … a_mc 深度小 しかし,あまりそういう使い方はしません。 普通は,深度に「数値」 もしくは,「getNextHighestDepth()」 を入れることが多いと思います。 つまり, // a_mc の深度を 1000 と入れ替える a_mc.swapDepths(1000); とか, // a_mc の深度を 最上深度の物の 次に上の深度と入れ替える a_mc.swapDepths(getNextHighestDepth()); とかいう感じの使い方をすることが多いということです。 レイヤー上に手動で配置したものの深度は,負(マイナス)の深度になります。 つまり,手動では -16384 から -1 の範囲内でしか,ものを作成できません。深度自体は自動で割り振られます。 ActionScript では,さらに上の深度 0 から 1048575 にムービークリップを作成したり,ムービークリップを置いたりすることができます。 1048575 ┐ : ActionScriptでのみ配置可能な深度 0 ┘ -1 ┐ : 手動でレイヤーに配置する深度 -16384 ┘ したがって, ActionScript で ムービークリップなどを作成 or 配置していない場合は, // a_mc の深度を 1000 と入れ替える a_mc.swapDepths(1000); を実行しただけで,a_mc は必ず一番上に表示されることになります。 もし swapDepths する前に深度1000に何も無い場合は, 深度の交換というよりも a_mc が深度1000に移動するだけになります。 ただし, 深度 0 以上にレイヤーというものは存在しないのですから,a_mc は宙に浮いた状態になります。 したがって,シーン 2 に移っても宙に浮いた状態のままになるので, 残ってしまうという現象が起きます。 > この回答を見る前にswapDepth()を消したら解決しました。 swapDepth()を消したら, ドラッグしているものが一番上に表示されなくなったのではないでしょうか? それで良ければそれで良いです。 おそらく,swapDepth() は, ドラッグするムービークリップを一番上に表示させるということが目的で使われていたのだと思います。 ただそれだけと言えばそれだけだと思うので,消して問題ない場合は消しても大丈夫です。 消したらスリリングな夜を過ごせなくなるだけです ((-_-;)/(+_+;)\(-_-;) 違うって!)。
その他の回答 (1)
- BlurFiltan
- ベストアンサー率91% (1611/1754)
ドラッグするときに swapDepths() で深度変更しているからではないでしょうか。 深度を変更するとレイヤーに依存しなくなります。 深度0 以上に swapDepths() した場合は, removeMovieClip() で消してください。 つまり,シーン 2 の最初のフレームに, 消したいムービークリップのインスタンス名.removeMovieClip(); と書けば消えます。
補足
ご回答ありがとうございました。BlurFiltanさんのご指摘通りでした。 私の方では,この回答を見る前にswapDepth()を消したら解決しました。まだまだ初心者で分からないことだらけなのですが,swapDepthとはどのような目的で存在するものなのでしょうか。本を見ても「深度変更」とはなっていますが,どういう事なのかよく分かりません。よろしければ教えてください。よろしくお願いします。
補足
再度のそして丁寧なアドバイスありがとうございます。 (当方も立派なオヤジです。…。) BlurFiltanさんのご指摘通り,ドラッグするムービークリップが一番上に表示されなくなってしまいました。結局SwapDepthは復活です。 でも,次のようなやり方で何とか「残ってしまう」現象を解消することができました。 ドラッグするムービークリップ群をグループ化して新しい一つのムービークリップにする,というやり方です。 簡単にできるので,これで行こうと思うのですが,何か考えられる問題点があれば教えていただければと思います。 何度も何度も本当に申し訳ありません。