flash on 2016-5-8
♥0 |
Line 216 |
Modified 2016-05-08 00:51:23 |
MIT License
archived:2017-03-20 16:24:11
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/Y9M8
*/
package {
import flash.events.KeyboardEvent;
import flash.events.MouseEvent;
import flash.text.TextField;
import flash.events.Event;
import flash.display.Sprite;
public class FlashTest extends Sprite {
public function FlashTest() {
deb = new TextField();
deb.width=320;deb.height=240;
deb.mouseEnabled=false;
addChild(deb);
vecAct = new Vector.<xAct>(0,false);
vecBull = new Vector.<xAct>(0,false);
var a:xAct;
a =new xTemp();
a.cx=230;a.cy=230;
vecAct.push(a);
a = new xMakeRoid();
a.cx=230;a.cy=230;
a.visible=false;
vecBull.push(a);
stage.addEventListener(MouseEvent.MOUSE_DOWN, onMdown);
stage.addEventListener(MouseEvent.MOUSE_UP, onMup);
stage.addEventListener(KeyboardEvent.KEY_DOWN, onKdown);
stage.addEventListener(KeyboardEvent.KEY_UP, onKup);
stage.addEventListener(Event.ENTER_FRAME, onEnter);
}//ctor
public function onMdown(e:MouseEvent):void { mbutton = 1; }
public function onMup(e:MouseEvent):void { mbutton =0; }
public function onKdown(e:KeyboardEvent):void { vecKey[e.keyCode] = true; }
public function onKup(e:KeyboardEvent):void { vecKey[e.keyCode] = false; }
public function onEnter(e:Event):void
{
graphics.clear();
graphics.lineStyle(2, 0);
targx = stage.mouseX;
targy = stage.mouseY;
updateVec(vecAct);
updateVec(vecBull);
renderVec(vecAct);
renderVec(vecBull);
graphics.drawRect(0, 430, prhp*2, 32);
deb.text = ""+gt+"\n"+vecAct.length+"\n"+vecBull.length;
gt += 1;
}//onenter
public var deb:TextField;
public function renderVec(vec:Vector.<xAct>):void
{ var i:int; var num:int; var a:xAct;
num = vec.length; for(i=0;i<num;i+=1)
{ a = vec[i]; if (a==null || a.hp <=0) { continue; }
if(a.visible==false){continue;} a.render(graphics); }
}//render
public function updateVec(vec:Vector.<xAct>):void
{ var i:int; var num:int; var a:xAct; var k:int;
num = vec.length;
for (i = 0; i < num; i += 1)
{a = vec[i]; if (a == null || a.dead) { continue; } a.update(); }
num = vec.length;
for(i=0;i<num;i+=1)
{ a = vec[i]; if (a ==null || a.dead)
{ for (k=i;k<num-1;k+=1) { vec[k]=vec[k+1]; }
vec.pop(); num-=1; i-=1; continue; }
}//nexti
}//update
}//classend
}
import flash.display.Graphics;
import flash.ui.Keyboard;
var gt:int = 0;
var vecAct:Vector.<xAct>;
var vecBull:Vector.<xAct>;
var targx:Number = 0; var targy:Number = 0;
var prx:Number =0; var pry:Number = 0;
var prhp:int = 100;
var mbutton:int = 0;
var vecKey:Vector.<Boolean> = new Vector.<Boolean>(512,false);
function isKeyDown(k:int):Boolean { return vecKey[k] == true; }
function getMag(ax:Number, ay:Number):Number
{ return Math.sqrt(ax * ax + ay * ay); }
function isWall(ax:Number,ay:Number):Boolean
{ return (ax<0||ay<0||ax>465||ay>465); }
internal class xAct {
public var cx:Number = 0; public var cy:Number = 0;
public var vx:Number = 0; public var vy:Number = 0;
public var rad:Number = 8; public var ang:Number = 0;
public var hp:Number = 10; public var dead:Boolean = false;
public var visible:Boolean=true;
public var dmg:Number = 0;
public var reload:int = 0;
public var team:int = 0;
public function gotHit(d:Number):void { hp-=d; if (hp<=0){kill();} }
public function kill():void { if(dead){return;} dead=true; onKilled(); }
public function onKilled():void {}
public function render(g:Graphics):void
{ g.drawCircle(cx,cy,rad); }
public function update():void {}
}//xactor
internal class xBull extends xAct
{
override public function update():void
{
hp-=1;if(hp<=0){dead=true;}
var a:xAct; var i:int; var num:int;
num = vecAct.length;
for (i = 0; i < num; i += 1)
{
a = vecAct[i];
if (a.team == team) { continue; }
if ((cx + rad < a.cx - a.rad || cy + rad < a.cy - a.rad
|| cx - rad > a.cx + a.rad || cy - rad > a.cy + a.rad))
{ continue; }
if (getMag(a.cx - cx, a.cy - cy) > (rad + a.rad)) { continue; }
a.gotHit(dmg); kill(); return;
}//nexti
cx+=vx;cy+=vy;
}//update
}//xbull
internal class xRoid extends xAct
{
public function xRoid()
{ hp=10; dmg=1; }
override public function onKilled():void
{
if (rad<16){return;}
var i:int; var a:xAct;
for(i=0;i<3;i+=1)
{
a = new xRoid();
a.cx=cx;a.cy=cy;
a.ang = ang + i*(6.28/3);
a.vx =Math.cos(a.ang)*4;
a.vy =Math.cos(a.ang)*4;
a.rad = rad*0.6;
a.hp = a.rad*0.25 +1;
vecAct.push(a);
}//nexti
}//onkilled
override public function update():void
{
var wallhit:int = 0;
wallhit = 0;
vx = Math.cos(ang)*4;
vy = Math.sin(ang)*4;
if (vx<0&&isWall(cx-rad,cy)){vx-=vx;wallhit=1;}
if (vx>0&&isWall(cx+rad,cy)){vx-=vx;wallhit=1;}
if (vy<0&&isWall(cx,cy-rad)){vy=-vy;wallhit=1;}
if (vy>0&&isWall(cx,cy+rad)){vy=-vy;wallhit=1;}
if (wallhit >0){ ang = Math.atan2(vy,vx); ang+=Math.random()*0.2-0.1; }
cx+=vx;cy+=vy;
}//update
}//xroid
internal class xMakeRoid extends xAct
{
override public function update():void
{
if (reload > gt) { return; }
cx = Math.random()*465;
cy = Math.random()*465;
if (getMag(prx-cx, pry-cy)<128){return;}
if (vecAct.length>5){return; }
reload = gt+ 64;
var a:xAct;
a = new xRoid();
a.cx=cx;a.cy=cy; a.team=team;
a.rad=32;
a.ang = Math.random()*6.28;
vecAct.push(a);
}//update
}//xmakeroid
internal class xTemp extends xAct
{
public function xTemp()
{ team = 1; rad=12; }
override public function update():void
{
var dx:Number; var dy:Number; dx = 0; dy = 0;
var ms:Number; ms = 4;
vx = 0; vy = 0;
if (isKeyDown(Keyboard.W)) { vy += -ms; dy -= 1; }
if (isKeyDown(Keyboard.S)) { vy += ms; dy += 1; }
if (isKeyDown(Keyboard.A)) { vx += -ms; dx -= 1; }
if (isKeyDown(Keyboard.D)) { vx += ms; dx += 1; }
cx+=vx; cy+=vy;
prx=cx; pry=cy;
ang = Math.atan2(targy-cy,targx-cx);
if (mbutton > 0)
if (reload <gt)
{
reload =gt+8;
ms=8;
var a:xAct;
a = new xBull();
a.cx=cx;a.cy=cy;
a.vx = Math.cos(ang)*ms;
a.vy=Math.sin(ang)*ms;
a.team=team;
a.hp=32;
a.dmg=6;
vecBull.push(a);
}//endif
var i:int; var num:int;
num = vecAct.length;
for (i = 0; i < num; i += 1)
{
a = vecAct[i];
if (a==this){continue; }
if (a.team == team) { continue; }
if ((cx + rad < a.cx - a.rad || cy + rad < a.cy - a.rad
|| cx - rad > a.cx + a.rad || cy - rad > a.cy + a.rad))
{ continue; }
if (getMag(a.cx - cx, a.cy - cy) > (rad + a.rad)) { continue; }
//gotHit(a.dmg);
prhp-=1;
}//nexti
}//xupdate
}//xship