質問: 複数の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)
回答: #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; } ------------------------------------