flash on 2016-3-16
♥0 |
Line 96 |
Modified 2016-03-16 08:17:22 |
MIT License
archived:2017-03-20 16:21:18
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/W1aN
*/
package {
import flash.events.MouseEvent;
import flash.events.Event;
import flash.display.Sprite;
public class FlashTest extends Sprite {
public function FlashTest() {
vecNode = new Vector.<xNode>(0,false);
var xa:xNode;
var a:xNode;
a = new xNode();
a.cx=230;a.cy=230;
vecNode.push(a);
xa = a;
a = new xNode();
a.wx = -8; a.wy=-32;
a.parent = xa;
vecNode.push(a);
a = new xNode();
a.wx = -8; a.wy=32;
a.parent = xa;
vecNode.push(a);
stage.addEventListener(MouseEvent.CLICK, onClick);
stage.addEventListener(Event.ENTER_FRAME, onEnter);
}//ctor
public function onClick(e:MouseEvent):void
{
var b:xNode; var a:xNode;
b= vecNode[0];
var rx:Number; var ry:Number;
var ax:Number; var ay:Number;
ax = stage.mouseX; ay = stage.mouseY;
ax-=b.cx; ay-=b.cy;
rx = Math.cos(-b.ang)*ax - Math.sin(-b.ang)*ay;
ry = Math.sin(-b.ang)*ax + Math.cos(-b.ang)*ay;
a = new xNode();
a.wx = rx;
a.wy = ry;
a.wang = 0;
a.parent = b;
vecNode.push(a);
}//onclick
public var vecNode:Vector.<xNode>;
public function onEnter(e:Event):void
{
graphics.clear();
graphics.lineStyle(2, 0);
a = vecNode[0];
//a.ang = Math.atan2(stage.mouseY-a.cy,stage.mouseX-a.cx);
a.ang += 0.01;
var a:xNode; var b:xNode;
var i:int; var num:int;
num = vecNode.length;
for(i=0;i<num;i+=1)
{
a = vecNode[i];
if (a.parent != null)
{
b = a.parent;
setPos(a, a.wx,a.wy, b.cx,b.cy, b.ang);
a.ang = a.wang + b.ang;
graphics.moveTo(a.cx,a.cy);
graphics.lineTo(b.cx,b.cy);
}
graphics.drawCircle(a.cx,a.cy,8);
graphics.moveTo(a.cx,a.cy);
graphics.lineTo(a.cx+Math.cos(a.ang)*8,a.cy+Math.sin(a.ang)*8);
}//nexti
}//onenter
public function swapNode(a:xNode, b:xNode):void
{
var i:int; var k:int;
i = vecNode.indexOf(a); if (i==-1){return;}
k = vecNode.indexOf(b); if(k==-1){return;}
vecNode[k]=a; vecNode[i] =b;
}//swapnode
public function setPos(a:xNode, ax:Number, ay:Number, cx:Number, cy:Number, ta:Number):void
{
var ux:Number; var uy:Number;
var vx:Number; var vy:Number;
var nx:Number; var ny:Number;
nx = Math.cos(ta); ny = Math.sin(ta);
ux = nx*ax; uy = ny*ax;
vx = -ny*ay; vy = nx*ay;
a.cx = cx + ux + vx; a.cy = cy + uy + vy;
}//setpos
}//classend
}
internal class xNode
{
public var cx:Number = 0;
public var cy:Number = 0;
public var ang:Number = 0;
public var parent:xNode = null;
public var wx:Number = 0;
public var wy:Number = 0;
public var wang:Number = 0;
}//xnode