モーショングラフィックスで学ぶActionScript − Flash MX −

8.1 重なり判定(MovieClip.hitTest)と配列

ID: FB0209001 Page: 219/Line: 1


[p.219の1行目]

「それでも、入れ子になった子供のMovieClipと位置合わせするのでしたら、座標を変換する方法はあります。」


補足

親のMovieClipから見た対象MovieClipの座標値「_x」「_y」をステージ左上隅(_root)からの座標に変換するには、「MovieClip.localToGlobal」メソッドを使います。

このメソッドの使い方は、少し変わっています。しかも、「ActionScript辞書」の説明を読んでも、初めての人には意味がよくわかりにくいと思われます。この解説を読んだ後に、「ActionScript辞書」を再度ご確認いただくとよいでしょう。

まず、変換の対象となるのが、xy座標そのものではなく、「x」「y」というプロパティを設定したObjectオブジェクトです(「_x」「_y」ではありません。なお、座標値を設定したObjectオブジェクトの利用については、「7.3 MovieClip間で情報を受け渡す」をご参照ください)。

{x:x座標値, y:y座標値}

myMovieClip_mcから見たxy座標(0, 0)つまりこのMovieClipの基準点を、ステージ(_root)左上隅からの座標に変換するには、以下のようなスクリプトを記述します。

oMyPoint = {x:0, y:0};
myMovieClip_mc.localToGlobal(oMyPoint);

このメソッドでもうひとつ注意する点は、引数として渡したObjectの「x」「y」プロパティの値が直接変換されるということです。ですから、返還後の座標値を取得するには、変換したObjectの「x」「y」の値にアクセスして取出します。

このメソッドを使って、p.233のドロップ先MovieClipのスクリプトを書替えると、つぎのようになります。これで、ドロップ先MovieClipを他のMovieClipに入れ子にしても、「function」はステージ左上隅から見た座標を返すようになります。

// MovieClip: ドロップ先
// 第1フレームアクション
// 初期値の設定
lTargets.push(this);
function xGetInfo() {
  var oInfo = {x:_x+2, y:_y+2};   // まずxy座標をObjecに設定
  _parent.localToGlobal(oInfo);   // 親のMovieClipをターゲットとして座標変換
  oInfo.sType = sType;   // プロパティsTypeを追加
  return oInfo;
}

p.233のスクリプトでは、都合よく座標値をoInfoの「x」「y」プロパティとして設定しています。ですから、「MovieClip.localToGlobal」メソッドの変換対象Objectとしてそのまま指定できます。ターゲットパスは、入れ子の親ですから「_parent」を指定します。その後、Objectにこの「function」でもうひとつ必要なプロパティsTypeを追加して、「return」アクションで返しています。

_____

作成者: 野中文雄
作成日: 2002年9月5日


Copyright © 2001-2017 Fumio Nonaka.  All rights reserved.