flash on 2016-12-21
♥0 |
Line 136 |
Modified 2016-12-21 23:32:24 |
MIT License
archived:2017-03-20 16:21:42
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/865t
*/
package {
import flash.events.MouseEvent;
import flash.events.Event;
import flash.display.Sprite;
public class FlashTest extends Sprite {
public function FlashTest() {
vecAct = new Vector.<xAct>(0, false);
var a:xAct; var i:int; var num:int;
num=8;
for (i=0;i<num;i+=1)
{ a = new xAct();
a.team=0xFF;
a.cx = Math.random()*128;
a.cy = Math.random()*128;
vecAct.push(a);
}//nexti
for (i=0;i<num;i+=1)
{ a = new xAct();
a.team=0xFF0000;
a.cx = 300+Math.random()*128;
a.cy = 300+Math.random()*128;
vecAct.push(a);
}//nexti
for (i=0;i<num;i+=1)
{ a = new xAct();
a.team=0xFF00;
a.cx = 100+Math.random()*128;
a.cy = 300+Math.random()*128;
vecAct.push(a);
}//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 mhold:int = 0;
public var vecAct:Vector.<xAct>;
public var vecHold:Vector.<xAct> = new Vector.<xAct>(8, false);
public var numHold:int = 0;
public var gt:int = 0;
public function getMag(ax:Number, ay:Number):Number
{ return Math.sqrt(ax*ax+ay*ay); }
public function onEnter(e:Event):void
{
var mx:Number;
var my:Number;
if (mbutton > 0){mhold+=1;}else{mhold=0;}
mx = stage.mouseX; my = stage.mouseY;
graphics.clear();
graphics.lineStyle(2, 0);
var over:xAct;
var a:xAct; var i:int; var num:int;
over = null;
num = vecAct.length;
for (i=0;i<num;i+=1)
{
a = vecAct[i];
if (a.active == false){continue;}
graphics.beginFill(a.team, 0.5);
graphics.drawCircle(a.cx, a.cy, 8);
graphics.endFill();
graphics.moveTo(a.cx, a.cy);
graphics.lineTo(a.cx+Math.cos(a.ang)*8, a.cy+Math.sin(a.ang)*8);
if(a.target!=null)
{ graphics.moveTo(a.cx,a.cy); graphics.lineTo(a.target.cx, a.target.cy); }
if (over == null && getMag(a.cx-mx, a.cy-my)<16)
{ over = a; graphics.drawCircle(a.cx, a.cy, 12); }
a.combat();
if (a!= over){ a.move(); }
if (a.target == null && ( (i+gt)%32 == 0) )
{
// graphics.drawCircle(a.cx, a.cy,16);
a.target = checkTarg(a, 128);
}
}//nexti
if (over != null && mhold == 1 && numHold < 8 )
{ mhold=3; a=over; a.active=false; vecHold[numHold] = a; numHold +=1; }
if (over == null && mhold == 1 && numHold > 0)
{ mhold = 3; numHold-=1; a =vecHold[numHold]; a.cx=mx; a.cy=my; a.active=true; a.target=null; }
for(i=0;i<numHold;i+=1)
{ a = vecHold[i]; graphics.drawCircle(mx+16+i*8,my+8,4); }
gt += 1;
}//onenter
public function checkTarg(m:xAct, mag:Number):xAct
{
var d:Number; var ret:xAct;
var a:xAct; var i:int; var num:int;
num = vecAct.length;
for (i=0;i<num;i+=1)
{
a = vecAct[i];
if (a == m){continue;}
if (a.active == false) { continue; }
if (a.team == m.team){continue;}
d = getMag(a.cx-m.cx, a.cy-m.cy);
if (d > mag){ continue; }
mag = d; ret = a;
}//nexti
return ret;
}//checktarg
}//classend
}
internal class xAct
{
public var active:Boolean = true;
public var cx:Number = 0;
public var cy:Number = 0;
public var ang:Number = 0;
public var va:Number = 0.1;
public var team:int = 0xFF;
public var target:xAct = null;
public function getMag(ax:Number, ay:Number):Number
{ return Math.sqrt(ax*ax+ay*ay); }
public function combat():void
{
if (target == null) { return; }
if (target.active == false) { target = null; return; }
ang = Math.atan2(target.cy-cy, target.cx-cx);
if (getMag(cx-target.cx, cy-target.cy) < 32) { ang += 3.1415; }
}//combat
public function move():void
{
var vx:Number; var vy:Number;
vx = Math.cos(ang);
vy = Math.sin(ang);
if (vx>0&&cx+vx>435){ vx=-vx; }
if (vx<0&&cx+vx<0){ vx=-vx; }
if (vy>0&&cy+vy>435){ vy=-vy; }
if (vy<0&&cy+vy<0){ vy=-vy; }
ang = Math.atan2(vy, vx);
if (Math.random()<0.2){ va = Math.random()<0.5?-0.1:0.1; }
ang+=va;
cx+=vx;cy+=vy;
}//move
}//xact