flash on 2015-1-18
♥0 |
Line 142 |
Modified 2015-01-18 07:29:39 |
MIT License
archived:2017-03-30 11:49:48
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/x7aZ
*/
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:xActor;
a = new xActor(); a.spec = 1; vecAct[0] = a;
a.cx = 235; a.cy = 235;
a.team = 3;
a = makeNew(vecAct);
a.cx = 23; a.cy = 23; a.spec = 3; a.rad = 32;
a.ang = Math.random() * 6.28;
a.vx = Math.cos(a.ang) * 2;
a.vy = Math.sin(a.ang) * 2;
stage.addEventListener(KeyboardEvent.KEY_DOWN, onKdown);
stage.addEventListener(KeyboardEvent.KEY_UP, onKup);
stage.addEventListener(Event.ENTER_FRAME, onEnter);
}//ctor
public var vecKey:Vector.<Boolean> = new Vector.<Boolean>(512, false);
public function onKdown(e:KeyboardEvent):void { vecKey[e.keyCode] = true; }
public function onKup(e:KeyboardEvent):void { vecKey[e.keyCode] = false; }
public function isKeyDown(k:int):Boolean { return vecKey[k]; }
public var gt:int = 0;
public var vecAct:Vector.<xActor> = new Vector.<xActor>(32,false);
public var vecBull:Vector.<xActor> = new Vector.<xActor>(16,false);
public function makeNew(vec:Vector.<xActor>):xActor
{
var i:int; var num:int; var a:xActor; num = vec.length;
for (i = 0; i < num; i++)
{ a = vec[i]; if (a == null) { break; } }
a = new xActor(); vec[i] = a; return a;
}//makenew
public function checkCol(ta:xActor, vec:Vector.<xActor>):xActor
{
var i:int; var num:int; var a:xActor; num = vec.length;
var r:Number;
for (i = 0; i < num; i++)
{
a = vec[i]; if (a == null) { continue; }
if (a == ta) { continue; }
if (a.team == ta.team) { continue; }
r = getMag(a.cx-ta.cx, a.cy-ta.cy);
if (r < (a.rad + ta.rad)) { return a; }
}//nexti
return null;
}//checkcol
public function getMag(ax:Number, ay:Number):Number
{ return Math.sqrt(ax*ax+ay*ay); }
public function upVec(vec:Vector.<xActor>):void
{
var b:xActor;
var i:int; var num:int; var a:xActor;
num = vec.length;
for (i = 0; i < num; i++)
{
a = vec[i];
if (a == null) { continue; }
if (a.spec == 1) //player
{
var ms:Number; var ts:Number;
ms = 0.2; ts = 0.1;
if (isKeyDown(Keyboard.LEFT)) { a.ang -= ts; }
if (isKeyDown(Keyboard.RIGHT)) { a.ang += ts; }
if (isKeyDown(Keyboard.UP)) { a.vx+=Math.cos(a.ang)*ms; a.vy+=Math.sin(a.ang)*ms; }
if (isKeyDown(Keyboard.DOWN)) {a.vx+=Math.cos(a.ang)*-ms; a.vy+=Math.sin(a.ang)*-ms; }
a.vx *= 0.99; a.vy *= 0.99;
if (a.reload < gt)
if (isKeyDown(Keyboard.SPACE))
{
a.reload = gt + 10;
b = makeNew(vecBull);
b.spec = 2; b.ang = a.ang; b.team = a.team;
b.cx = a.cx; b.cy = a.cy; b.hp = 100; b.rad = 4;
b.vx = Math.cos(a.ang)*4; b.vy = Math.sin(a.ang)*4;
}//endif
}//endif
if (a.spec == 2) //bullet
{
var k:int;
for (k = 0; k < 4; k++)
{
a.hp -= 1;
b = checkCol(a, vecAct);
a.cx += a.vx; a.cy+=a.vy;
graphics.drawCircle(a.cx, a.cy, a.rad);
if (b != null) { b.hp -= 20; a.hp = -1; break; }
}
if (a.hp <= 0) { vec[i] = null; continue; }
continue;
}//endif
if (a.spec == 3)
{
a.ang += (a.vx+a.vy)*0.2;
if (a.hp <= 0)
if (a.rad > 8)
{
b = makeNew(vecAct);
b.rad = a.rad *0.5; b.team = a.team;
b.cx = a.cx; b.cy = a.cy; b.spec = a.spec;
b.vx = -a.vy *0.75; b.vy = a.vx *0.75;
b = makeNew(vecAct);
b.rad = a.rad *0.5; b.team = a.team;
b.cx = a.cx; b.cy = a.cy; b.spec = a.spec;
b.vx = a.vy *0.75; b.vy = -a.vx *0.75;
}
}
if (a.vx > 0 && a.cx > 435) { a.vx *= -1; }
if (a.vx < 0 && a.cx < 0) { a.vx *= -1; }
if (a.vy > 0 && a.cy > 435) { a.vy *= -1; }
if (a.vy < 0 && a.cy < 0) { a.vy *= -1; }
a.cx += a.vx; a.cy+=a.vy;
if (a.hp <= 0) { vec[i] = null; continue; }
graphics.drawCircle(a.cx, a.cy, a.rad);
graphics.moveTo(a.cx, a.cy);
graphics.lineTo(a.cx+Math.cos(a.ang)*8,a.cy+Math.sin(a.ang)*8);
}//nexti
}//upvec
public function onEnter(e:Event):void
{
graphics.clear();
graphics.lineStyle(2, 0);
gt += 1;
upVec(vecAct);
upVec(vecBull);
}//onenter
}//classend
}
internal class xActor
{
public var spec:int = 0;
public var cx:Number = 0;
public var cy:Number = 0;
public var vx:Number = 0;
public var vy:Number = 0;
public var ang:Number = 0;
public var rad:Number = 8;
public var hp:Number = 20;
public var reload:int = 0;
public var team:int = 0;
}//xactor