• ベストアンサー

複数のMC(ドラッグで移動可能)から等しい距離にMCを配置したい

ドラッグで移動可能な複数のムービークリップから等しい距離の位置にムービークリップを配置したいです。 以下『複数』が3つの場合を例にします。 MC4はMC1、MC2、MC3がドラッグで移動されると、MC1、MC2、MC3への距離が等しい位置(厳密に等しくなくても良い)に移動させたいです。(結果、MC4はMC1、MC2、MC3を三角形とした際の重心点上に配置される) オーサリングツールは『ParaFla!』ActionSctiptは1.0相応で以下の様に作ってみましたが、いつまで経っても落ち着かないので改善したいです。 ※スクリプトのスペースは全角で記述。 ■MC1、MC2、MC3 _root上にMC1を深度0、[固定]で配置。 _root上にMC2を深度1、[固定]で配置。 _root上にMC3を深度2、[固定]で配置。 MC1,MC2,MC3にテキストで●を配置。 MC1,MC2,MC3に以下スクリプトを記述。 on (press){  this.startDrag(); // ドラッグを開始する } - on (release, releaseOutside){  this.stopDrag (); // ドラッグを解除する } ■MC4 _root上にMC4を深度3に配置。 MC4にテキストで○を配置し、以下スクリプトを記述。 onClipEvent (enterFrame){  long=0;  short=0;  for(i=1;i<=3;i++){   mc=eval('_root.MC'+i);   length=Math.sqrt((mc._x-_x)*(mc._x-_x)+(mc._y-_y)*(mc._y-_y));   if(long<=length){    long=length;    long_mc=mc;   }   if(short>=length||short==0){    short=length;    short_mc=mc;   }  }  _x += ((long_mc._x+short_mc._x)/2 - _x)/5;  _y += ((long_mc._y+short_mc._y)/2 - _y)/5; } 上記のようにして作成したものを以下に置きます。 http://carken.web.fc2.com/osiete/test3.html 動かしてみると、いつまでたっても、細かく動いて止まってくれません。 厳密に同じ距離でなくても良く、ある程度見た目にOKかなってところで止まるようにしたいです。 アドバイスありましたら、よろしくお願いいたします。 参考 『2つのMC(ドラッグで移動可能)から等しい距離にMCを配置したい』(http://oshiete1.goo.ne.jp/qa4328262.html

質問者が選んだベストアンサー

  • ベストアンサー
noname#77303
noname#77303
回答No.1

こんにちは。 三角形ABCの重点Gは3つの中線の交わる点で、"G=(A+B+C)/3"となります。 ですから、MC4座標の算出方法を MC4._x = (MC1._x + MC2._x + MC3._x)/ 3; MC4._y = (MC1._y + MC2._y + MC3._y) / 3; と変えてみてはどうでしょう。 この2つで重点の座標が出るはずです。 つい先日、同じようなものをASの勉強で作っていた所です。 http://www5.pf-x.net/~vivo/sample/triangle.swf

参考URL:
http://questionbox.jp.msn.com/qa979950.html?StatusCheck=ON
kingfruits
質問者

お礼

ご回答ありがとうございます。 >つい先日、同じようなものをASの勉強で作っていた所です。 まさにこんな事がしたかったのです。

その他の回答 (1)

  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.2

#1 の方とほぼ同意見で,前半が少し違います。 というかご質問が2つに取れます。 > ムービークリップから等しい距離の位置にムービークリップを配置したい と言うことでしたら, 三角形の外心(外接円の中心)を求めることになると思います。 これには,次の URL の式を使わせてもらうことにします。 「メモ-別記5」 http://www.h6.dion.ne.jp/~jpe02_tn/ki-5.html > 1 外接円の中心座標を求める計算式 >  A1=2(X2-X1) >  B1=2(Y2-Y1) >  C1=X1^2-X2^2+Y1^2-Y2^2 >  A2=2(X3-X1) >  B2=2(Y3-Y1) >  C2=X1^2-X3^2+Y1^2-Y3^2 >  X=(B1C2-B2C1)/(A1B2-A2B1) >  Y=(C1A2-C2A1)/(A1B2-A2B1) これを, MC4 のスクリプトに直すと次のようになります。 ------------------------------------ onClipEvent (enterFrame) { A1 = 2*(_root.MC2._x-_root.MC1._x); B1 = 2*(_root.MC2._y-_root.MC1._y); C1 = _root.MC1._x*_root.MC1._x-_root.MC2._x*_root.MC2._x+_root.MC1._y*_root.MC1._y-_root.MC2._y*_root.MC2._y; A2 = 2*(_root.MC3._x-_root.MC1._x); B2 = 2*(_root.MC3._y-_root.MC1._y); C2 = _root.MC1._x*_root.MC1._x-_root.MC3._x*_root.MC3._x+_root.MC1._y*_root.MC1._y-_root.MC3._y*_root.MC3._y; X = (B1*C2-B2*C1)/(A1*B2-A2*B1); Y = (C1*A2-C2*A1)/(A1*B2-A2*B1); _x += (X-_x)/5; _y += (Y-_y)/5; } ------------------------------------ > MC4はMC1、MC2、MC3を三角形とした際の重心点上 ということでしたら,式は全く変わります。 また上のURLの式を使わせてもらうことにします。 > 2 重心の座標を求める計算式 >  X=(X1+X2+X3)/3 >  Y=(Y1+Y2+Y3)/3 これを, MC4 のスクリプトに直すと次のようになります。 ------------------------------------ onClipEvent (enterFrame) { X = (_root.MC1._x+_root.MC2._x+_root.MC3._x)/3; Y = (_root.MC1._y+_root.MC2._y+_root.MC3._y)/3; _x += (X-_x)/5; _y += (Y-_y)/5; } ------------------------------------

kingfruits
質問者

お礼

ご回答ありがとうございます。 > > ムービークリップから等しい距離の位置にムービークリップを配置> したい > > と言うことでしたら, > 三角形の外心(外接円の中心)を求めることになると思います。 等しい距離の位置だと重心になると思い込んでましたが、違うのですね。教えていただいたURLが、とても勉強になりました。

関連するQ&A