flash on 2015-2-1
♥0 |
Line 105 |
Modified 2015-02-01 07:14:24 |
MIT License
archived:2017-03-30 11:48: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/eDKm
*/
package {
import flash.events.MouseEvent;
import flash.display.StageQuality;
import flash.events.Event;
import flash.display.Sprite;
public class FlashTest extends Sprite {
public function FlashTest() {
stage.quality = StageQuality.LOW;
myUnit = new xUnit();
myUnit.cx = 230; myUnit.cy = 230;
stage.addEventListener(MouseEvent.MOUSE_DOWN, onMdown);
stage.addEventListener(MouseEvent.MOUSE_UP, onMup);
stage.addEventListener(Event.ENTER_FRAME, onEnter);
}//ctor
public var mdown:int = 0;
public function onMdown(e:MouseEvent):void { mdown = 1; }
public function onMup(e:MouseEvent):void { mdown = 0; }
public var mx:Number = 0;
public var my:Number = 0;
public var wmx:Number = 0;
public var wmy:Number = 0;
public var myUnit:xUnit;
public var curSel:xUnit;
public var gt:int = 0;
public function isOver(id:int, ax:Number,ay:Number,aw:Number,ah:Number):Boolean
{
var over:Boolean;
over = (mx < ax || my < ay || mx > ax + aw || my > ay + ah) == false;
return over;
}//isover
public function onEnter(e:Event):void
{
var a:xUnit;
mx = stage.mouseX; my = stage.mouseY;
wmx = mx; wmy = my;
a = myUnit;
if (a.state > 0)
{
a.ang = Math.atan2(a.gy-a.cy,a.gx-a.cx);
var vx:Number; var vy:Number;
vx = Math.cos(a.ang); vy = Math.sin(a.ang);
a.cx += vx; a.cy += vy;
if (getMag2(a.cx-a.gx, a.cy-a.gy) < 32) { a.state = 0; }
}//endif
graphics.clear();
a = myUnit;
graphics.lineStyle(2,0);
graphics.beginFill(1, 0.5);
graphics.drawCircle(a.cx, a.cy, a.rad);
graphics.endFill();
graphics.moveTo(a.cx,a.cy);
graphics.lineTo(a.cx+Math.cos(a.ang)*8,a.cy+Math.sin(a.ang)*8);
var over:xUnit;
if (isOver(10, a.cx-a.rad,a.cy-a.rad,a.rad*2,a.rad*2)) { over = a; }
a = over; if (a != null) {
graphics.drawRect(a.cx-a.rad,a.cy-a.rad,a.rad*2,a.rad*2);
graphics.drawCircle(a.cx,a.cy,a.range);
}
if (a != null && mdown > 0) { curSel = a; }
a = curSel; if (a != null) {
graphics.drawRect(a.cx-a.rad,a.cy-a.rad,a.rad*2,a.rad*2); }
if (over == null && curSel != null && mdown > 0)
{
a = curSel; curSel = null;
a.gx = wmx; a.gy = wmy; a.state = 1;
}
a = myUnit;
if (a.state > 0)
{
graphics.moveTo(a.cx,a.cy);
graphics.lineTo(a.gx,a.gy);
var i:int;
var ax:Number; var ay:Number;
var u:Number; var t:Number; var w:Number;
var num:int;
// t = (gt % 128) / 128;
num = (getMag2(a.cx-a.gx,a.cy-a.gy) / 2048);
t = 2048 / (getMag2(a.cx-a.gx,a.cy-a.gy))
//for (u = 0; u < 1; u+=0.1)
w = 0;
for (i = 0; i < num; i++)
{
w+= t;
//w = u + t; if (w > 1) { w -=1;}
ax = a.cx +(a.gx-a.cx)*w;
ay = a.cy +(a.gy - a.cy)*w;
graphics.drawCircle(ax,ay, 4);
}//nextu
}//endif
graphics.drawRect(mx-8,my,16,1);
graphics.drawRect(mx,my-8,1,16);
gt += 1;
}//onenter
public function getMag2(ax:Number,ay:Number):Number
{ return ax*ax+ ay*ay;}
}//classend
}
internal class xUnit
{
public var cx:Number = 0;
public var cy:Number = 0;
public var rad:Number = 16;
public var ang:Number = 0;
public var range:Number = 128;
public var gx:Number = 0;
public var gy:Number = 0;
public var state:int = 0;
}//xunit