flash on 2015-8-17
♥0 |
Line 105 |
Modified 2015-08-17 09:16:34 |
MIT License
archived:2017-03-30 11:43:52
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/rPzt
*/
package {
import flash.events.Event;
import flash.display.Sprite;
public class FlashTest extends Sprite {
public function FlashTest() {
graphics.clear();
graphics.lineStyle(2, 0);
vecLine = new Vector.<xLine>(0,false);
var ta:Number;
var a:xLine; var i:int; var num:int;
for (i=0;i< 32;i+=1)
{
a = new xLine();
a.cx = Math.random()*465;
a.cy = Math.random() *465;
a.gx = a.cx+Math.random() * 128;
a.gy = a.cy+Math.random() * 128;
vecLine.push(a);
ta = Math.atan2(a.gy-a.cy, a.gx-a.cx);
a.ny = -Math.cos(ta);
a.nx = Math.sin(ta);
if (Math.random()<0.5) { a.ny*=-1; a.nx*=-1; }
}//nexti
stage.addEventListener(Event.ENTER_FRAME, onEnter);
}//ctor
public var vecLine:Vector.<xLine>;
public function cutLine(a:xLine, ax:Number, ay:Number, nx:Number, ny:Number):Number
{
var ta:Number; var tb:Number;
ta = (a.cx-ax)*nx + (a.cy-ay) * ny;
tb = (a.gx-ax)*nx + (a.gy-ay) * ny;
if (ta < 0 && tb < 0) { return - 1; }
if (ta > 0 && tb > 0) { return - 1; }
return ta / ( (a.cx-a.gx)*nx + (a.cy-a.gy)* ny);
}//cutline
public var gt:int = 0;
public function onEnter(e:Event):void
{
graphics.clear();
graphics.lineStyle(2, 0);
gt += 1;
var ax:Number; var ay:Number; var ta:Number;
var a:xLine; var i:int; var num:int;
var b:xLine;
var mx:Number; var my:Number;
var t:Number;
var cw:Number; var ch:Number;
cw =32; ch =32;
cw=64; ch = 64;
mx = stage.mouseX; my = stage.mouseY;
var kx:Number; var ky:Number;
kx = cw * gt; ky = ch*gt;
graphics.lineStyle(1, 0x808080);
for (i=0;i< 16;i+=1)
{
graphics.moveTo(0,i*ch); graphics.lineTo(465,i*ch);
graphics.moveTo(i*cw,0); graphics.lineTo(i*cw,465);
}//nexti
graphics.lineStyle(1, 0);
num = vecLine.length;
for (i=0;i<num;i+=1)
{
a = vecLine[i];
t = cutLine(a, kx, ky, 1, 0);
if (t <=0 || t >=1)
{ t = cutLine(a, kx, ky, 0, 1); }
if (t <=0 || t >=1)
{ continue; }
ax = a.cx +(a.gx-a.cx) * t;
ay = a.cy +(a.gy-a.cy) * t;
if (vecLine.length < 256)
{
b = new xLine();
b.cx = ax; b.cy =ay;
b.gx= a.gx; b.gy = a.gy;
b.nx = a.nx; b.ny = a.ny;
a.gx = ax;
a.gy = ay;
vecLine.push(b);
}//endif
}//nexti
/*
num = vecLine.length;
for (i=0;i<num;i+=1)
{
a = vecLine[i];
t = cutLine(a, mx,my, 1, 0);
if (t > 0 && t < 1)
{
ax = a.cx +(a.gx-a.cx) * t;
ay = a.cy +(a.gy-a.cy) * t;
graphics.drawCircle(ax,ay,4);
}
t = cutLine(a, mx,my, 0, 1);
if (t > 0 && t < 1)
{
ax = a.cx +(a.gx-a.cx) * t;
ay = a.cy +(a.gy-a.cy) * t;
graphics.drawCircle(ax,ay,4);
}
}//nexti
*/
num = vecLine.length;
for (i=0;i<num;i+=1)
{
a = vecLine[i];
graphics.moveTo(a.cx,a.cy);
graphics.lineTo(a.gx,a.gy);
ax = a.cx+(a.gx-a.cx)*0.5;
ay = a.cy+(a.gy-a.cy)*0.5;
graphics.moveTo(ax,ay);
graphics.lineTo(ax+a.nx*8,ay+a.ny*8);
graphics.drawCircle(a.cx,a.cy,4);
}//nexti
}//onenter
}//classend
}
internal class xLine
{
public var cx:Number = 0;
public var cy:Number = 0;
public var gx:Number = 0;
public var gy:Number = 0;
public var nx:Number = 0;
public var ny:Number = 0;
}//xline