flash on 2015-9-30
♥0 |
Line 88 |
Modified 2015-09-30 02:20:43 |
MIT License
archived:2017-03-30 11:42:46
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/8v7R
*/
package {
import flash.events.Event;
import flash.display.Sprite;
public class FlashTest extends Sprite {
public function FlashTest() {
myNode = new xNode();
myNode.genRect(64,64, 128, 128);
stage.addEventListener(Event.ENTER_FRAME, onEnter);
}//ctor
public var myNode:xNode;
public function onEnter(e:Event):void
{
graphics.clear();
graphics.lineStyle(2, 0);
myNode.checkDist(graphics, stage.mouseX, stage.mouseY, 128);
}//onenter
}//classend
}
import flash.display.Graphics;
internal class xRect
{
public var cx:Number = 0; public var cy:Number = 0;
public var cw:Number = 0; public var ch:Number = 0;
public function getMagRect(ax:Number, ay:Number):Number
{
var ix:Number; var iy:Number;
if (ax < cx) { ix = cx;} else if (ax > cx+cw) { ix = cx+cw; } else { ix = ax; }
if (ay < cy) { iy = cy;} else if (ay > cy+ch) { iy = cy+ch; } else { iy = ay; }
return getMag(ix-ax, iy-ay);
}//getmagrect
public function getMag(ax:Number, ay:Number):Number
{ return Math.sqrt(ax * ax + ay * ay); }
}//xrect
internal class xNode
{
public var top:xRect;// = new xRect();
public var vecMid:Vector.<xRect>; //= new Vector.<xRect>(4, false);
public var vecLow:Vector.<xRect>;// = new Vector.<xRect>(16, false);
public function genRect(ax:Number, ay:Number, aw:Number, ah:Number):void
{
var a:xRect; var i:int; var k:int;
vecMid = new Vector.<xRect>(4, false);
vecLow = new Vector.<xRect>(16, false);
top = new xRect(); top.cx = ax; top.cy = ay; top.cw = aw; top.ch = ah;
aw *=0.5; ah *=0.5
for(i=0;i<2;i+=1)
{ for (k=0;k<2;k+=1)
{ a = new xRect(); vecMid[(i*2)+k] = a;
a.cw = aw; a.ch = ah; a.cx = ax+k*aw; a.cy = ay+i*ah;
}//nextk
}//nexti
aw*=0.5; ah*=0.5;
for(i=0;i<4;i+=1)
{ for (k=0;k<4;k+=1)
{ a = new xRect(); vecLow[(i*4)+k] = a;
a.cw = aw; a.ch = ah; a.cx = ax+k*aw; a.cy = ay+i*ah;
}//nextk
}//nexti
}//genrect
public function checkDist(g:Graphics, ax:Number, ay:Number, rad:Number):void
{
var a:xRect; var i:int; var k:int;
var b:xRect;
a = top;
if (a.getMagRect(ax, ay) > rad)
{
g.drawRect(top.cx, top.cy, top.cw, top.ch);
return;
}//endif
for (i = 0; i < 4; i += 1)
{
a = vecMid[i];
if (a.getMagRect(ax, ay) > rad)
{
g.drawRect(a.cx, a.cy, a.cw, a.ch);
continue;
}//endif
k = 0;
if (i == 1) { k = 2; }
if (i == 2) { k = 8; }
if (i == 3) { k = 10; }
//k = i * 4;
b = vecLow[k]; g.drawRect(b.cx, b.cy, b.cw,b.ch);
b = vecLow[k+1]; g.drawRect(b.cx, b.cy, b.cw,b.ch);
b = vecLow[k+4]; g.drawRect(b.cx, b.cy, b.cw,b.ch);
b = vecLow[k+1+4]; g.drawRect(b.cx, b.cy, b.cw,b.ch);
}//nexti
}//checkdist
}//xrect