Flash Tutorial for Beginners Procreo Flash Design
ProcreoFlashDesign
初心者のためのFlashレベルアップ講座

二点間の距離を求める (三平方の定理)
 
 

概要

ステージ左上が
座標(X,Y)=(0,0)

ball1(赤ボール)
X1=ball1._x
Y1=ball1._y


ball2(青ボール)
X2=ball2._x
Y2=ball2._y


解説

上の例のような大元のステージ(_root)に配置された赤いボールのムービークリップ(ball1とします。)と青いボールのムービークリップ(ball2とします。)の直線距離を求めるアクションスクリプトの解説をしていきます。
二点間の距離を求めるために必要な要素はそれぞれのムービークリップのx座標とy座標です。具体的に書くと

   ball1のx座標は _root.ball1._x   (上図ではX1)
        y座標は _root.ball1._y   (上図ではY1)

   ball2のx座標は _root.ball2._x   (上図ではX2)
        y座標は _root.ball2._y   (上図ではY2)


となります。ちなみに今回は関係ないのですが、マウスポインタの座標(_rootを基準とした場合)は

   マウスポインタのx座標 _root._xmouse
              y座標 _root._ymouse

で求めることができます。 マウスポインタの座標を使うとマウスとの距離に反応して動くムービークリップ等を簡単に制作することができるようになります。(右下サンプルムービー参照)
では、ball1とball2のそれぞれのxy座標がわかれば、あとは上図に書いてある三平方の定理の公式に当てはめるだけです。
この時、√ルートはアクションスクリプトでは Math.sqrt() として用意されています。
見栄えも気にせず直接的に記述すれば、次のようになります。

   kyori=Math.sqrt(_root.ball2._x-_root.ball1._x)*(_root.ball2._x-_root.ball1._x)+(_root.ball2._y-_root.ball1._y)*(_root.ball2._y-_root.ball1._y)

さすがにこれでは、という方はxとyの距離をそれぞれ適当な変数(ここでは a と b )を用意して

   a=(_root.ball2._x-_root.ball1._x
   b=(_root.ball2._y-_root.ball1._y
   kyori=Math.sqrt(a*a+b*b)

とすればスマートでわかりやすいかもしれません。

この二点間の距離を求めるスクリプトは基本的なものですが、アイデア次第で上手く活用できると思います。


補足

この二点間の距離をよく使うフラッシュムービーを制作される方は、たとえば次のようなグローバル関数を作って、_rootのフレーム1にでも記述しておくと後は、いつでもどこからでも簡単に二点間の距離を求めることができて便利です。

_global.dist2 = function(x1, y1, x2, y2) {
	var a = x2-x1;
	var b = y2-y1;
	var c = Math.sqrt(a*a+b*b);
	return c;
};
値を求めるときは

<例>   kyori=dist2(ball1._x,ball1._y,ball2._x,ball2._y)

のように、それぞれのxy座標を入れるだけです。



(Download:circle9.fla 19KB)


注記

このページの解説では分かり易くするため、 できるだけ直感的なスクリプトにしています。その為、最適化されたスクリプトとはいえませんので、悪しからずご了承ください。また、間違った言葉の使い方等しているかもしれませんので、参考程度にお考えください。間違いや不備のご指摘等ありましたら是非ご一報ください。
(June,2003 FlashMX)

E-mail
| HOME | About | Flash Laboratory | Flash Tutorial | Flash Free Material | Books | Links |