flash on 2016-9-6
♥0 |
Line 142 |
Modified 2016-09-06 05:32:38 |
MIT License
archived:2017-03-20 16:22:47
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/05VJ
*/
package {
import flash.display.StageQuality;
import flash.events.MouseEvent;
import flash.events.Event;
import flash.display.Sprite;
public class FlashTest extends Sprite {
public function FlashTest() {
stage.quality = StageQuality.MEDIUM;
vecLine = new Vector.<xLine>(0, false);
var a:xLine;
var x0:Number; var y0:Number;
var x1:Number; var y1:Number;
var i:int;
x0 = 0; y0 = 330;
x1 = 100; y1 = 330;
for (i=0;i<32;i+=1)
{
a = new xLine(); vecLine.push(a);
a.x0 = x0; a.y0 = y0;
a.x1 = x1; a.y1 = y1;
x0 = x1; y0 = y1;
x1 = x0 + Math.random()*32+32;
y1 = y0 + Math.random()*200-100;
}//nexti
x0 = 0; y0 = 130;
x1 = 100; y1 = 130;
for (i=0;i<32;i+=1)
{
a = new xLine(); vecLine.push(a);
a.x0 = x0; a.y0 = y0;
a.x1 = x1; a.y1 = y1;
x0 = x1; y0 = y1;
x1 = x0 + Math.random()*32+32;
y1 = y0 + Math.random()*200-100;
}//nexti
stage.addEventListener(MouseEvent.MOUSE_DOWN, onMdown);
stage.addEventListener(MouseEvent.MOUSE_UP, onMup);
stage.addEventListener(Event.ENTER_FRAME, onEnter);
}//ctor
public function onMdown(e:MouseEvent):void { mbutton=1;}
public function onMup(e:MouseEvent):void {mbutton=0;}
public var mbutton:int = 0;
public var vecLine:Vector.<xLine>;
public var cx:Number =230;
public var cy:Number =230;
public var vx:Number =0;
public var vy:Number =0;
public var ang:Number =0;
public var vang:Number=0;
public var camx:Number = 0;
public var camy:Number = 0;
public function getMag(ax:Number,ay:Number):Number
{ return Math.sqrt(ax*ax+ay*ay); }
public function onEnter(e:Event):void
{
graphics.clear();
graphics.lineStyle(2, 0);
vang *=0.9;
vang = vx*0.1; ang+=vang;
vx*=0.99;vy*=0.99;
vy+=0.4;
if (vy>8){vy=8;}
var mx:Number; var my:Number;
mx = stage.mouseX; my =stage.mouseY;
if (mbutton > 0) { cx = mx+camx; cy = my+camy; }
if ((cx-camx) < mx + 30 && vx < 3) { vx+= 1; }
if ((cx-camx) > mx - 30 && vx > -3) { vx -= 1; }
if (cy > 500) { cx = 235; cy =235; vx=0;vy=0;}
camx += ((cx-230)-camx)*0.1;
camy += ((cy-230)-camy)*0.1;
var r:Number;
var wr:Number;
r=16;
wr=16;
wr =2;
var px:Number; var py:Number;
px =cx; py=cy;
graphics.drawCircle(px-camx,py-camy,r);
graphics.moveTo(px-camx,py-camy);
graphics.lineTo(px+Math.cos(ang)*r-camx,py+Math.sin(ang)*r-camy);
var a:xLine;
var i:int; var num:int;
var k:int;
num = vecLine.length;
for (i=0; i<num; i+=1)
{
a = vecLine[i];
graphics.drawCircle(a.x0-camx,a.y0-camy,4);
graphics.drawCircle(a.x1-camx,a.y1-camy,4);
graphics.moveTo(a.x0-camx,a.y0-camy);
graphics.lineTo(a.x1-camx,a.y1-camy);
}//nexti
num = vecLine.length;
for (k=0; k<4; k+=1)
for (i=0; i<num; i+=1)
{
a = vecLine[i];
var t:Number;
t = getClose(px,py,a.x0,a.y0,a.x1,a.y1);
//graphics.drawCircle(closex-camx,closey-camy,wr);
var dx:Number; var dy:Number;
var mag:Number;
dx= (px)-closex;dy=(py)-closey;
mag = getMag(dx,dy);
if (mag==0){mag=0.001;}
dx/=mag;dy/=mag;
if (mag<(r+wr))
{
var dot:Number;
dot = vx*dx+vy*dy;
if (dot<0)
{
vx += -dx*dot;
vy += -dy*dot;
//vang += (((vy*dx)+(dy*vx)) / -r)*0.3;
}
/*
graphics.moveTo(closex-camx,closey-camy);
graphics.lineTo(closex-camx+dx*32,closey-camy+dy*32);
t = dx; dx=-dy; dy=t;
vx+=dx*0.1; vy+=dy*0.1;
graphics.moveTo(px-camx, py-camy);
graphics.lineTo(px-camx+dx*32, py-camy+dy*32);
*/
}//endif
}//nexti
cx+=vx; cy+=vy;
}//onenter
public var closex:Number =0;
public var closey:Number =0;
public function getClose(px:Number,py:Number, x0:Number,y0:Number,x1:Number,y1:Number):Number
{
var t:Number;
var ax:Number; var ay:Number;
var bx:Number; var by:Number;
ax = px-x0; ay=py-y0;
bx=x1-x0; by=y1-y0;
t = (ax*bx+ay*by)/(bx*bx+by*by);
if(t<0){t=0;} if(t>1){t=1;}
closex=x0+bx*t;
closey=y0+by*t;
return t;
}//getclose
}//classend
}
internal class xLine
{
public var x0:Number = 0;
public var y0:Number = 0;
public var x1:Number = 0;
public var y1:Number = 0;
}//xline