flash on 2016-8-18
♥0 |
Line 91 |
Modified 2016-08-18 04:22:04 |
MIT License
archived:2017-03-20 16:23:03
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/SOHt
*/
package {
import flash.events.MouseEvent;
import flash.events.Event;
import flash.display.Sprite;
public class FlashTest extends Sprite {
public function FlashTest() {
vecVert = new Vector.<xVert>(0, false);
var a:xVert; var i:int;
a = new xVert(); vecVert.push(a); a.cx = 100; a.cy =50;
a = new xVert(); vecVert.push(a); a.cx = 200; a.cy =60;
a = new xVert(); vecVert.push(a); a.cx = 220; a.cy =160;
a = new xVert(); vecVert.push(a); a.cx = 320; a.cy =180;
stage.addEventListener(MouseEvent.CLICK, onClick);
stage.addEventListener(Event.ENTER_FRAME, onEnter);
}//ctor
public var vecVert:Vector.<xVert>;
public function onClick(e:MouseEvent):void
{
r0 = Math.random()*70 + 10;
r1 = Math.random()*70 + 10;
r2 = Math.random()*70 + 10;
cx = Math.random()*200+100;
cy = Math.random()*200+100;
}//onclick
public var r0:Number = 50;
public var r1:Number = 50;
public var r2:Number = 50;
public function distCon(a:xVert, b:xVert, r:Number, t:Number=1.0):void
{
var mag:Number; var dx:Number; var dy:Number;
dx = a.cx-b.cx; dy = a.cy-b.cy;
mag = Math.sqrt(dx*dx+dy*dy);
if (mag ==0) { mag =0.0001; }
dx/=mag; dy/=mag;
r = r - mag; r*=0.5*t;
a.cx += dx*r; a.cy += dy*r;
b.cx += dx*-r; b.cy += dy*-r;
graphics.moveTo(a.cx,a.cy);
graphics.lineTo(b.cx,b.cy);
}//distcon
public function lineCon(a:xVert, b:xVert, c:xVert, r:Number, t:Number):void
{
var ta:Number; var nx:Number; var ny:Number;
ta = Math.atan2(b.cy-a.cy, b.cx-a.cx);
ta+=1.57;
nx = Math.cos(ta);
ny = Math.sin(ta);
var d:Number;
d = (c.cx-a.cx)*nx + (c.cy-a.cy)*ny;
if (d < r)
{
r -= d;
c.cx += nx*r;
c.cy += ny*r;
}
/*
graphics.moveTo(a.cx,a.cy);
graphics.lineTo(b.cx,b.cy);
graphics.moveTo(a.cx,a.cy);
graphics.lineTo(a.cx+nx*8,a.cy+ny*8);
graphics.drawCircle(c.cx, c.cy,16);
*/
}//linecon
public var cx:Number = 235;
public var cy:Number = 235;
public function onEnter(e:Event):void
{
graphics.clear();
graphics.lineStyle(2, 0);
a = vecVert[0]; a.cx = cx; a.cy= cy;
a = vecVert[3]; a.cx=stage.mouseX; a.cy=stage.mouseY;
graphics.lineStyle();
distCon(vecVert[0], vecVert[3], r0+r1+r2, 1.0);
graphics.lineStyle(2, 0);
for (i=0;i<8;i+=1)
{
a = vecVert[0]; a.cx = cx; a.cy = cy;
distCon(vecVert[0], vecVert[1], r0, 1/8);
distCon(vecVert[1], vecVert[2], r1, 1/8);
distCon(vecVert[2], vecVert[3], r2, 1/8);
lineCon(vecVert[0], vecVert[2], vecVert[1], 16, 1/8);
} //nexti
var i:int; var num:int; var a:xVert;
num = vecVert.length;
for (i=0;i<num;i+=1)
{
a = vecVert[i];
graphics.drawCircle(a.cx, a.cy, 8);
}//nexti
}//onenter
}//classend
}
internal class xVert
{
public var cx:Number = 0;
public var cy:Number = 0;
}//xvert