flash on 2016-7-5
♥0 |
Line 117 |
Modified 2016-07-05 08:07:14 |
MIT License
archived:2017-03-20 16:23:22
ActionScript3 source code
/**
* Copyright mutantleg ( http://wonderfl.net/user/mutantleg )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/oTft
*/
package {
import flash.events.Event;
import flash.display.Sprite;
public class FlashTest extends Sprite {
public function FlashTest() {
vecRect = new Vector.<xRect>(0,false);
vecRect2 = new Vector.<xRect>(0,false);
var a:xRect;
var i:int;
for (i=0;i<32;i+=1)
{
a = new xRect();
a.cx = Math.random()*405;
a.cy = Math.random()*405;
a.cw = Math.random()*64+8;
a.ch = Math.random()*64+8;
vecRect.push(a);
}//nexti
a = vecRect[0];
rx=a.cx;
ry=a.cy;
rw=a.cw;
rh=a.ch;
stage.addEventListener(Event.ENTER_FRAME, onEnter);
}//ctor
public var vecRect:Vector.<xRect>;
public var vecRect2:Vector.<xRect>;
public var rx:Number =0;
public var ry:Number =0;
public var rw:Number =0;
public var rh:Number =0;
public var gt:int = 0;
public function onEnter(e:Event):void
{
graphics.clear();
graphics.lineStyle(2,0);
var i:int; var num:int; var a:xRect;
num = vecRect.length;
for (i=0;i<num;i+=1)
{
a = vecRect[i];
graphics.drawRect(a.cx,a.cy,a.cw,a.ch);
}//nexti
graphics.lineStyle(2,0xFF);
num=vecRect2.length;
for (i=0;i<num;i+=1)
{
a = vecRect2[i];
graphics.drawRect(a.cx,a.cy,a.cw,a.ch);
graphics.moveTo(a.cx,a.cy);
graphics.lineTo(a.cx+a.cw,a.cy+a.ch);
}//nexti
graphics.lineStyle(2, 0xFF0000);
graphics.drawRect(rx,ry,rw,rh);
gt+=1;
if (gt%8 != 0) { return; }
a = getClose(rx,ry,rw,rh);
if (a == null){return;}
var ix:Number; var iy:Number;
var kx:Number; var ky:Number;
ix = Math.max(rx+rw, a.cx+a.cw);
iy = Math.max(ry+rh, a.cy+a.ch);
kx = Math.min(a.cx, rx);
ky = Math.min(a.cy, ry);
rx= kx;
ry =ky;
rw = ix-kx;
rh = iy-ky;
i = vecRect.indexOf(a);
if (i<0){return;}
num = vecRect.length - 1;
for (i;i<num;i+=1)
{ vecRect[i] = vecRect[i+1]; }
vecRect.pop();
vecRect2.push(a);
}//onenter
public function getClose(ax:Number,ay:Number,aw:Number,ah:Number):xRect
{
var dx:Number; var dy:Number; var d:Number;
var i:int; var num:int; var a:xRect;
var ret:xRect; var rd:Number;
ret = vecRect[0]; rd =9999;
num = vecRect.length;
for (i=0;i<num;i+=1)
{
a = vecRect[i];
if (ax+aw < a.cx){continue;}
if (ay+ah < a.cy){continue;}
if (a.cx+a.cw < ax){continue;}
if (a.cy+a.ch < ay){continue;}
return a;
}//nexti
for (i=0;i<num;i+=1)
{
a = vecRect[i];
dx = 0; dy =0;
if (ay > (a.cy+a.ch)) { dy = ay-(a.cy+a.ch); }
if (ay+ah < (a.cy)) { dy = a.cy-(ay+ah); }
if (ax > (a.cx+a.cw)) { dx = ax-(a.cx+a.cw); }
if (ax+aw < (a.cx)) { dx = a.cx-(ax+aw); }
if (dx > 0 && dy > 0) { d = Math.sqrt(dx*dx+dy*dy); }
else { d = dx+dy; }
if (d>=rd){continue;}
rd=d;
ret=a;
}//nexti
return ret;
}//getclose
}//classend
}
internal class xRect
{
public var cx:Number = 0;
public var cy:Number = 0;
public var cw:Number = 0;
public var ch:Number = 0;
}//xrect