点配置問題(8)
点のドラッグはできないけど、クリックで点の配置が変えられるようにしてみた。
コンストラクタ(?)の変更と関数の追加。
クリックした点に最も近かった点がクリックした場所に移動します。
function Arrange (path) { var ref = this; path.createEmptyMovieClip("base", 10); path.createEmptyMovieClip("runnable", 100); base = path.base; var runnable :MovieClip = path.runnable; x = new Array(); y = new Array(); sx = new Array(); sy = new Array(); x[0] = 0; y[0] = 0; for (i=1; i<=nn; i ++){ x[i] = (Math.random()-0.5)*BASE_CENTER_X/2; y[i] = (Math.random()-0.5)*BASE_CENTER_Y/2; } cc = 0; saved = 0; drawn = 1; base._x = BASE_CENTER_X; base._y = BASE_CENTER_Y; runnable.onEnterFrame = function () :Void { ref.onEnterFrameHandler(); }; runnable.onMouseDown = function () :Void { ref.onMouseDownHandler(); }; } private function onMouseDownHandler():Void{ var curx:Number = _root._xmouse - BASE_CENTER_X; var cury:Number = _root._ymouse - BASE_CENTER_Y; var lmin:Number = 1000; var index:Number; for (i=1; i<=nn; i ++){ len = Math.sqrt( (curx - x[i]) * (curx - x[i]) + (cury - y[i]) * (cury - y[i]) ); if (lmin > len) { lmin = len; index = i; } } x[index] = curx; y[index] = cury; }
これをやった場合、ループ回数とか更新ステップとかを調整した方がいいと思われます。
いかがでしょうか>id:Nabetaniさま