flash on 2013-7-24
♥0 |
Line 157 |
Modified 2013-07-25 18:41:31 |
MIT License
archived:2017-03-30 22:50:34
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/hVB0
*/
package {
import flash.ui.Keyboard;
import flash.events.KeyboardEvent;
import flash.events.Event;
import flash.display.Sprite;
public class FlashTest extends Sprite {
public function FlashTest() {
var a:xNode;
vecNode = new Vector.<xNode>(0, false);
a = new xNode();
a.d = 0;
a.cx = 232;
a.cy = 232;
a.ca = 0;
vecNode.push(a);
a = new xNode();
a.cx = 30;
a.cy = 0;
a.ca = 0;
a.p = vecNode[0];
a.d = a.p.d + 1;
vecNode.push(a);
a = new xNode();
a.cx = 0;
a.cy = 20;
a.ca = 0.7;
a.p = vecNode[1];
a.d = a.p.d + 1;
vecNode.push(a);
a = new xNode();
a.cx = 40;
a.cy = 0;
a.ca = 0.3;
a.p = vecNode[2];
a.d = a.p.d+1;
vecNode.push(a);
vecPnt = new Vector.<xPnt>(0, false);
var p:xPnt;
p = new xPnt();
p.cx = 265+50;
p.cy = 265+50;
p.p = vecNode[2];
vecPnt.push(p);
upNodes();
var i:int;
var num:int;
num = vecNode.length;
for (i = 0; i < num; i++)
{
a = vecNode[i];
a.sx = a.tx;
a.sy = a.ty;
a.sa = a.ta;
}//nexti
stage.addEventListener(KeyboardEvent.KEY_DOWN, kdown);
stage.addEventListener(KeyboardEvent.KEY_UP, kup);
stage.addEventListener(Event.ENTER_FRAME, onEnter);
}//ctor
public var vecKey:Vector.<Boolean> = new Vector.<Boolean>(512, false);
public function kdown(e:KeyboardEvent):void { if (e.keyCode > 511) {return;} vecKey[e.keyCode]=true;}
public function kup(e:KeyboardEvent):void { if (e.keyCode > 511) { return; } vecKey[e.keyCode] = false;}
public function upNodes():void
{
var i:int;
var num:int;
var a:xNode;
var p:xNode;
num = vecNode.length;
for ( i = 0; i <num ;i++)
{
a = vecNode[i];
if (a.d <= 0)
{
a.tx = a.cx;
a.ty = a.cy;
a.ta = a.ca;
continue;
}
var rx:Number;
var ry:Number;
var ra:Number;
p = a.p;
a.ta = a.ca + p.ta;
ra = p.ta;
rx = a.cx * Math.cos(ra) - a.cy * Math.sin(ra);
ry = a.cx * Math.sin(ra) + a.cy * Math.cos(ra);
a.tx = p.tx + rx;
a.ty = p.ty + ry;
}//nexti
}//upnode
public var vecNode:Vector.<xNode>;
public var vecPnt:Vector.<xPnt>;
public function onEnter(e:Event):void
{
graphics.clear();
graphics.lineStyle(2, 0);
var a:xNode;
var p:xNode;
var i:int;
var num:int;
num = vecNode.length;
//vecNode[0].ca += 0.01;
//vecNode[1].ca += 0.01;
if (vecKey[Keyboard.UP]) { vecNode[0].ca -= 0.1;}
if (vecKey[Keyboard.DOWN]) { vecNode[0].ca += 0.1;}
if (vecKey[Keyboard.LEFT]) { vecNode[1].ca -= 0.1;}
if (vecKey[Keyboard.RIGHT]) { vecNode[1].ca += 0.1;}
upNodes();
var m:xPnt;
num = vecPnt.length;
for (i = 0; i < num; i++)
{
m = vecPnt[i];
p = m.p;
graphics.drawRect(m.cx-3,m.cy-3,6,6);
var kx:Number;
var ky:Number;
var ka:Number;
kx = m.cx - p.sx;
ky = m.cy - p.sy;
ka = p.ta - p.sa;
var rx:Number;
var ry:Number;
rx = kx * Math.cos(ka) - ky * Math.sin(ka) + p.tx;
ry = kx * Math.sin(ka) + ky * Math.cos(ka) + p.ty;
graphics.drawRect(rx-3, ry-3, 6,6);
graphics.drawCircle(p.sx, p.sy, 4);
}//nexti
num = vecNode.length;
for ( i = 0; i <num ;i++)
{
a = vecNode[i];
graphics.moveTo(a.tx, a.ty);
graphics.lineTo(a.tx+Math.cos(a.ta)*8, a.ty+ Math.sin(a.ta)*8);
graphics.drawCircle(a.tx, a.ty, 8);
} //nexti
}//onenter
}//classend
}
internal class xPnt
{
public var cx:Number = 0;
public var cy:Number = 0;
public var p:xNode;
}
internal class xNode
{
public var cx:Number = 0;
public var cy:Number = 0;
public var ca:Number = 0;
public var tx:Number = 0;
public var ty:Number = 0;
public var ta:Number = 0;
public var sx:Number = 0;
public var sy:Number = 0;
public var sa:Number = 0;
public var d:int = 0;
public var p:xNode = null;
}//xnode