flash on 2012-1-12
♥2 |
Line 350 |
Modified 2012-01-13 18:57:36 |
MIT License
archived:2017-03-30 23:01:47
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/3pnn
*/
package {
import flash.events.KeyboardEvent;
import flash.accessibility.Accessibility;
import flash.accessibility.AccessibilityImplementation;
import flash.display.AVM1Movie;//FlashTest
import flash.geom.Rectangle;
import flash.events.Event;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Sprite;
/*
CONTROLS: ARROW KEYS
*/
[SWF(backgroundColor=0xFFFFFF,frameRate=60)]
public class FlashTest extends Sprite {
public var canvas:BitmapData;
public var pic:Bitmap;
// public var vecActor:Vector.<cActor>;
//public var wa:cWorld;
public var mgame:cGame;
public function FlashTest() {
// write as3 code here..
canvas = new BitmapData(400,400,false,0);
pic = new Bitmap(canvas);
// canvas.noise(0);
// canvas.fillRect(canvas.rect, 0);
addChild(pic);
//vecActor = new Vector.<cActor>();
//wa = new cWorld();
mgame = new cGame();
init();
//canvas = pic.bitmapData;
// canvas.fillRect(canvas.rect, 0);
// pic.x = 40;
//important to add them to stage
stage.addEventListener(KeyboardEvent.KEY_DOWN, kdown);
stage.addEventListener(KeyboardEvent.KEY_UP, kup);
addEventListener(Event.ENTER_FRAME, onEnter);
}//flashtestAccessibility
public function kdown(e:KeyboardEvent):void
{
cKeyMan.setKey(e.keyCode, true);
}//kdown
public function kup(e:KeyboardEvent):void
{
cKeyMan.setKey(e.keyCode, false);
}//kup
public function init():void
{
var i:int;
var num:int;
var a:cActor;
num = 100;
for (i = 0; i < num; i++)
{
a = new cActor();
a.cx = Math.random()*400;
a.cy = Math.random()*400;
a.vx = Math.random() - Math.random();
a.vy = Math.random() - Math.random();
a.xrad = Math.random() * 8;
a.yrad = Math.random() * 8;
//wa.addActor(a);
mgame.addActor(a);
}//nexti
a = new aPlayer();
//wa.addActor(a);
mgame.addActor(a, 2);
}//init
public function onEnter(e:Event):void
{
//upActor();
//wa.update();
mgame.update();
canvas.fillRect(canvas.rect, 0);
canvas.lock();
draw(canvas);
canvas.unlock();
}//onenter
public function draw(to:BitmapData):void
{
to.fillRect(to.rect, 0);
mgame.draw(to);
//wa.drawActor(to);
//drawActor(to);
}//draw
}//flashtest
}
import flash.display.AVM1Movie;//package
import flash.geom.Rectangle;
import flash.events.Event;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Sprite;
internal class cKeyMan
{
public function cKeyMan() {}//ctor (unused)
public static var vecKey:Vector.<Boolean> = new Vector.<Boolean>(512,true);
public static function setKey(k:int, b:Boolean):void
{
if (k < 0) return;
if (k >= 512) return;
vecKey[k] = b;
}//setkey
public static function isKeyDown(k:int):Boolean
{
if (k < 0) return false;
if (k >= 512) return false;
return vecKey[k];
}//iskey
}//keyman
internal class cGame
{
public static var game:cGame; //singleton
public function cGame()
{
game = this; //set singleton
wa = new cWorld();
wbull = new cWorld();
wp = new cWorld();
}//cgame
public var wa:cWorld;
public var wp:cWorld;
public var wbull:cWorld;
public function draw(to:BitmapData):void
{
wa.draw(to);
//wp.draw(to);
wbull.draw(to);
wp.draw(to);
}//draw
public function update():void
{
wa.update();
wp.update();
wbull.update();
}//update
public function getWorld(w:int):cWorld
{
switch (w)
{
case 0:
default:
return wa;
break;
case 1:
return wbull;
break;
case 2:
return wp;
break;
}//swend
return null;
}//getworld
public function getPlayBullWorld():cWorld
{
return wbull;
}//getpbullworld
public function addActor(a:cActor, t:int=0):void
{
if (a == null) return;
var ww:cWorld;
ww = getWorld(t);
if (ww == null) return;
ww.addActor(a);
}//addactor
}//game
internal class cWorld
{
public var vecActor:Vector.<cActor>;
public function cWorld()
{
vecActor = new Vector.<cActor>;
}//ctor
public function addActor(a:cActor):void
{
if (a == null) return;
vecActor.push(a);
}//addactor
public function update():void
{
upActor();
}//update
public function draw(to:BitmapData):void
{
drawActor(to);
}//draw
public function drawActor(to:BitmapData):void
{
var i:int;
var num:int;
var a:cActor;
num = vecActor.length;
for (i = 0; i < num; i++)
{
a = vecActor[i];
if (a.bDead) continue;
if (!(a.bVisible)) continue;
a.draw(to);
}//nexti
}//drawactor
public function upActor():void
{
var i:int;
var num:int;
var a:cActor;
var bFoundDead:Boolean = false;
num = vecActor.length;
for (i = 0; i < num; i++)
{
a = vecActor[i];
if (a.bDead) { bFoundDead = true; continue; }
a.update();
}//nexti
if (bFoundDead) remDead();
}//upactor
public function remDead():void
{
var i:int;
var num:int;
var a:cActor;
num = vecActor.length;
for (i = 0; i < num; i++)
{
a = vecActor[i];
if (!(a.bDead)) continue;
vecActor[i] = vecActor[num - 1];
num = vecActor.length;
i-=1;
vecActor.pop();
}//nexti
}//remdead
}//world
internal class cActor
{
public var cx:Number = 0;
public var cy:Number = 0;
public var vx:Number = 0;
public var vy:Number = 0;
public var xrad:Number = 4;
public var yrad:Number = 4;
public var hp:Number = 10;
public var team:int = 0;
public var color:int = 0;
public var bDead:Boolean = false;
public var bVisible:Boolean = true;
public function cActor()
{
color = Math.random() * 0xffFFffFF;
}//ctor
public function makeActor(a:cActor, t:int):void
{
if (cGame.game == null) return;
cGame.game.addActor(a, t);
}//makeact
public function isOver(a:cActor):Boolean
{
if (cx +xrad < a.cx -a.xrad) return false;
if (cx-xrad > a.cx + a.xrad) return false;
if (cy + yrad < a.cy - a.yrad) return false;
if (cy - yrad > a.cy + a.yrad) return false;
return true;
}//isover
public function col(a:cActor):Boolean
{
return false;
}//col
public function checkColWorld(w:cWorld):void
{
if ( w == null) return;
var vec:Vector.<cActor>;
var i:int;
var num:int;
var a:cActor;
vec = w.vecActor;
num = vec.length;
for (i = 0; i < num; i++)
{
a = vec[i];
if (a.bDead) continue;
if (a == this) continue;
if (a.team == team) continue;
if (isOver(a))
{ if (!(col(a)) ) return; }
}//nexti
}//checkcworld
public function kill():void
{
bDead = true;
}//kill
public static var drect:Rectangle = new Rectangle();
public function draw(to:BitmapData):void
{
drect.x = cx - xrad;
drect.y = cy - yrad;
drect.width = xrad + xrad;
drect.height = yrad + yrad;
to.fillRect(drect, color);
}//draw
public function update():void
{
cx += vx;
cy += vy;
if (cx < 0 && vx < 0) vx = -vx;
else if (cx > 400 && vx > 0) vx = -vx;
if (cy < 0 && vy < 0) vy = -vy;
else if (cy > 400 && vy > 0) vy = -vy;
}//update
}//actor
internal class apBull extends cActor
{
public function apBull()
{
super();
xrad = 2;
yrad = 4;
hp = 100;
color = 0xFF00FFFF;
}//ctor
override public function update():void
{
cx += vx;
cy += vy;
hp -= 1;
if (hp <= 0) {bDead = true; return;}
if (cy < 0) {bDead = true; return;}
checkColWorld(cGame.game.getWorld(0));
}//update
override public function col(a:cActor):Boolean
{
kill();
a.kill();
return false;
}//col
}//apbull
internal class aPlayer extends cActor
{
public function aPlayer()
{
super();
xrad = 16;
yrad = 16;
color = 0xFFFF0000;
cx = 200;
cy = 300;
team = 2;
}//aplayer
public var reload:int = 0;
override public function update():void
{
//firing
if (reload > 0) reload -=1;
if (cKeyMan.isKeyDown(38) && reload <= 0 )
{
reload = 10;
var a:apBull;
a= new apBull();
a.cx = cx;
a.cy = cy;
a.vy = -8;
a.team = team;
makeActor(a,1);
}//endif
//movement
vx = 0
//ref
//http://www.dakmm.com/?p=272
if (cKeyMan.isKeyDown(39)) vx = 8;
else if (cKeyMan.isKeyDown(37)) vx = -8;
if (vx > 0 && cx >= 400-xrad) {vx =0; cx = 400-xrad; }
else if (vx < 0 && cx < xrad) {vx = 0; cx = xrad;}
cx += vx;
cy += vy;
}//update
}//aplayer