- 締切済み
位置あわせ
root上のaaa_mcの位置にb_mcのなかのc_mcをa_btnを押すと、移動させたいのですが、localTogrobalを使ってやりたいのですが、どうやればいいでしょうか?
- みんなの回答 (1)
- 専門家の回答
みんなの回答
昔(Flash 5)からあるムービークリップクラス(ムービークリップオブジェクト)のメソッドですが, わかりにくく,使いにくいメソッドですよね。 > どうやればいいでしょうか? というご質問なので, 以下はほとんどやり方だけの説明です。 ご質問は, _root ├ aaa_mc └ b_mc └ c_mc となっていて, c_mc →移動→ a_mc ですね。 この場合は「a_btn」に, ----------------------------------------- on (release) { // 基準となるオブジェクトの作成 var myPoint = new Object(); // // 基準座標の設定(この場合 _root の基準点) myPoint.x = 0; myPoint.y = 0; // // aaa_mc の座標をグローバル座標に変換 _root.aaa_mc.localToGlobal(myPoint); // // 変換した座標を b_mc (c_mc の親)のローカル座標に変換 _root.b_mc.globalToLocal(myPoint); // // その座標に c_mc を持ってくる _root.b_mc.c_mc._x = myPoint.x; _root.b_mc.c_mc._y = myPoint.y; } ----------------------------------------- こう書けば行けると思います。 と言うか, 「aaa_mc」の座標は元からグローバルな座標なので, ご質問の localToGlobal は必要なく, ----------------------------------------- on (release) { // 基準となるオブジェクトの作成 var myPoint = new Object(); // // 基準座標の設定 myPoint.x = _root.aaa_mc._x; myPoint.y = _root.aaa_mc._y; // // その座標を b_mc(c_mcの親)のローカル座標に変換 _root.b_mc.globalToLocal(myPoint); // // その座標に c_mc を持ってくる _root.b_mc.c_mc._x = myPoint.x; _root.b_mc.c_mc._y = myPoint.y; } ----------------------------------------- これで良いのです。 _root ├ aaa_mc │ └ bbb_mc │ └ccc_mc └ b_mc └ c_mc c_mc →移動→ ccc_mc この場合は, ----------------------------------------- on (release) { // 基準となるオブジェクトの作成 var myPoint = new Object(); // // 基準座標の設定(この場合 _root の基準点) myPoint.x = 0; myPoint.y = 0; // // aaa_mc の座標をグローバル座標に変換 _root.aaa_mc.bbb_mc.ccc_mc.localToGlobal(myPoint); // // 変換した座標を b_mc (c_mc の親)のローカル座標に変換 _root.b_mc.globalToLocal(myPoint); // // その座標に c_mc を持ってくる _root.b_mc.c_mc._x = myPoint.x; _root.b_mc.c_mc._y = myPoint.y; } ----------------------------------------- または, ----------------------------------------- on (release) { // 基準となるオブジェクトの作成 var myPoint = new Object(); // // bbb_mc親 の座標をグローバル座標に変換 myPoint.x = _root.aaa_mc.bbb_mc.ccc_mc._x; myPoint.y = _root.aaa_mc.bbb_mc.ccc_mc._y; _root.aaa_mc.bbb_mc.localToGlobal(myPoint); // // 変換した座標を b_mc (c_mc の親) のローカル座標に変換 _root.b_mc.globalToLocal(myPoint); // // その座標に c_mc を持ってくる _root.b_mc.c_mc._x = myPoint.x; _root.b_mc.c_mc._y = myPoint.y; } ----------------------------------------- と書けば行けると思います。 _root └ aaa_mc ├ bbb_mc │ └ ccc_mc └ b_mc └ c_mc c_mc →移動→ ccc_mc この場合は, -------------------------------- on (release) { // 基準となるオブジェクトの作成 var myPoint = new Object(); // // 基準座標の設定 myPoint.x = 0; myPoint.y = 0; // // ccc_mc の座標をグローバル座標に変換 _root.aaa_mc.bbb_mc.ccc_mc.localToGlobal(myPoint); // // 変換した座標を b_mc(c_mcの親)のローカル座標に変換 _root.aaa_mc.b_mc.globalToLocal(myPoint); // // その座標に c_mc を持ってくる _root.aaa_mc.b_mc.c_mc._x = myPoint.x; _root.aaa_mc.b_mc.c_mc._y = myPoint.y; } -------------------------------- または, -------------------------------- on (release) { // 基準となるオブジェクトの作成 var myPoint = new Object(); // // ccc_mc の座標をグローバル座標に変換 myPoint.x = _root.aaa_mc.bbb_mc.ccc_mc._x; myPoint.y = _root.aaa_mc.bbb_mc.ccc_mc._y; _root.aaa_mc.bbb_mc.localToGlobal(myPoint); // // 変換した座標を b_mc (c_mcの親)のローカル座標に変換 _root.aaa_mc.b_mc.globalToLocal(myPoint); // // その座標に c_mc を持ってくる _root.aaa_mc.b_mc.c_mc._x = myPoint.x; _root.aaa_mc.b_mc.c_mc._y = myPoint.y; } ------------------------------- これで行けると思います。 行けますが… やはりイヤなメソッドですね。 イヤですし,上のようにできても, 考えれば考えるほどこんがらがってきて,うまく説明できません。 考えるよりパターンとして使う方が良いのかもしれません。 私は,やっぱり,相対座標(ローカル座標)を足し算引き算する方が好きです。 まあ,何というか, _root.aaa_mc.bbb_mc ._globalx とか, _root.aaa_mc.bbb_mc ._rootx みたいな座標プロパティがあれば良いと思いますが,これがないのですよ。 Flash 8 のヘルプですが,参考URL。 「localToGlobal (MovieClip.localToGlobal メソッド)」 http://livedocs.macromedia.com/flash/8_jp/main/00002481.html 「globalToLocal (MovieClip.globalToLocal メソッド)」 http://livedocs.macromedia.com/flash/8_jp/main/00002469.html ネットも探しましたが, ちゃんと説明されているサイトは見つけることができませんでした。 唯一,ココが参考になるかもしれません。 他の方の回答です。 「2つの異なる階層のMCを操作する方法」 http://oshiete1.goo.ne.jp/qa2004666.html ↑教えて!goo ↓OKWave (同じです) http://okwave.jp/qa2004666.html