アプリ版:「スタンプのみでお礼する」機能のリリースについて

※FLASH 5 を使っています。

attachMovie で複製した MC での swapDepths について教えて下さい。

まず attachMovie をする為の素材を作ります。
丸い図形を作り、それをボタンにし 『 ボタン1 』 とします。
そのボタンを MC にして 『 MC1 』 とします。
『 MC1 』 をリンケージで識別子を 『 MARU 』 とします。
『 MC1 』 に配置された 『 ボタン1 』 に下記 AS を書きます。
on (press) {
this.swapDepths(_root.HAICHI.maxdepth++);
startDrag ("");
}
on (release) {
stopDrag ();
}

別に配置用の空の MC を作り、ステージ上に配置し 『 HAICHI 』 と名前を付けます。
更にステージ上に 『 ボタン1 』 を配置して、そのボタンに下記 AS を書きます。
on (release) {
i ++;
_root.HAICHI.attachMovie( "MARU", "MARU"+i, _root.HAICHI.maxdepth++ );
_root.HAICHI["MARU"+i]._x = 50;
_root.HAICHI["MARU"+i]._y = _ymouse;
}

これでボタンを押すと丸い形の MC が複数配置できるようになります。
また複製された MC のうち背後にある MC をクリックすると、その MC が最前面に配置
されるようになります。

ここまでは良いのですが、新たに 『 MC2 』 を作り、そこに 『 MC1 』 を配置します。
つまり『 MC2 』 の中に 『 MC1 』 が配置され 『 MC1 』 の中に 『 ボタン1 』 が配置
されている状態です。
更に 『 MC1 』 のリンケージを解除して、『 MC2 』 にリンケージで識別子を 『 MARU 』
とします。
このようにした場合、ボタンを押すと MC の複製は出来るのですが、MC をクリックしても
最前面には出て来ません。
ムービークリップのムービークリップでは swapDepths は利かないのでしょうか?
MC にも AS を書きたいので、どうしても入れ子にしなければなりません。
何か良い方法がありましたら教えて頂けますよう宜しくお願い致します。

A 回答 (1件)

階層を図示すると次のようになると思います。



////////////////////////////////////////////////////////

(1) 最初の状態

 _root
  ├ ボタン1(_root.HAICHI.attachMovie( "MARU",…)
  └ 元は空のMC(インスタンス名 HAICHI)
     │ ---↓ボタンクリックによってできる↓---
     ├ MC1(インスタンス名 MARU1)
     │ └ ボタン1 (this.swapDepths(_root.HAI.…)
     ├ MC1(インスタンス名 MARU2)
     │ └ ボタン1 (this.swapDepths(_root.HAI.…)
     ├ MC1(インスタンス名 MARU3)
     │ └ ボタン1 (this.swapDepths(_root.HAI.…)
     …… 以下略 ……


(2) MC2 の中に MC1 を入れた状態

 _root
  ├ ボタン1(_root.HAICHI.attachMovie( "MARU",…)
  └ 元は空のMC(インスタンス名 HAICHI)
     │ ---↓ボタンクリックによってできる↓---
     ├ MC2(インスタンス名 MARU1)
     │ └ MC1
     │   └ ボタン1 (this.swapDepths(_root.HAI…)
     ├ MC2(インスタンス名 MARU2)
     │ └ MC1
     │   └ ボタン1 (this.swapDepths(_root.HA.I…)
     ├ MC2(インスタンス名 MARU3)
     │ └ MC1
     │   └ ボタン1 (this.swapDepths(_root.HA.I…)
     …… 以下略 ……

////////////////////////////////////////////////////////


(1)の状態で,
MC1 の中の ボタン1 に書かれている this.swapDepths の this は,
そのボタンが存在するムービークリップ MC1 のことを指します。
この,this.swapDepths によって,
MC1 の深度を 「HAICHI」 の中で変えるのですから,
MC1(MARU1,MARU2,MARU3,…)の深度はちゃんと入れ代わります。

(2)の状態では,
MC2 の中の MC1 の中の ボタン1 に書かれている this.swapDepths の this は,
そのボタンが存在するムービークリップ MC1 のことを指します。
この,this.swapDepths によって,
MC1 の深度を 「HAICHI」 の中の MC2 の中で変えるのですから,
MC1 自体の深度が MC2 の中で変わるだけで,
MC2(MARU1,MARU2,MARU3,…)の深度は全く入れ替わりません。

つまり,ターゲットパスの問題です。
したがって,
(2)の状態の MC2 の中の MC1 の中の ボタン1 には,
次のように書かなければならないと思います。

------------------------------------------
on (press) {
_parent.swapDepths(_root.HAICHI.maxdepth++);
startDrag(_parent);
}
on (release) {
stopDrag();
}
------------------------------------------

深度を変えるべきターゲットとなるMCは,
this(このMC),ではなく _parent(親のMC) です。

参考URL:http://homepage3.nifty.com/ginga-b/MX/targetpath …
    • good
    • 0
この回答へのお礼

ありがとうございました。
_root.HAICHI.maxdepth++ の階層ばかり考えていました。
おっしゃる通り_parent.swapDepths にしないといけませんね。
もっと注意しないといけないと思いました。
本当にありがとうございました。

お礼日時:2007/05/08 10:47

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