flash on 2015-7-8
♥0 |
Line 101 |
Modified 2015-07-08 21:00:49 |
MIT License
archived:2017-03-30 11:45:43
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/gZFI
*/
package {
import flash.text.TextField;
import flash.utils.Dictionary;
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);
stage.addEventListener(Event.ENTER_FRAME, onEnter);
}//ctor
public var deb:TextField;
public function onEnter(e:Event):void
{
graphics.clear();
graphics.lineStyle(2, 0);
updateVec(vecAct);
updateVec(vecAct2);
graphics.lineStyle(2, 0xff0000);
renderVec(vecAct);
graphics.lineStyle(2, 0xff);
renderVec(vecAct2);
var a:xActor;
a = new xShip();
a.cx=Math.random()*465; a.vx=Math.random()*2-1;
a.team = Math.random()*2;
if (a.team == 0) { a.cy = 32; a.vy=1; } else { a.cy=430; a.vy=-1; }
addActor(a, a.team==0?vecAct:vecAct2);
deb.text = ""+vecAct.length+"\n"+vecAct2.length;
}//onenter
public function renderVec(vec:Vector.<xActor>):void
{ var i:int; var num:int; var a:xActor; num = vec.length;
for (i = 0; i < num; i++) { a = vec[i]; if (a.dead) { continue; } if (!(a.visible)) { continue; }
graphics.drawRect(a.cx-a.xrad,a.cy-a.yrad,a.xrad*2,a.yrad*2); }
}//rendervec
public var vecAct:Vector.<xActor> = new Vector.<xActor>(0, false);
public var vecAct2:Vector.<xActor> = new Vector.<xActor>(0, false);
public var dictAct:Dictionary = new Dictionary(); public var curId:int = 1;
public function addActor(a:xActor, vec:Vector.<xActor>):void
{ a.id = curId; curId += 1; vec.push(a); dictAct[a.id] = a; a.game = this; a.init(); }
public function getActor(id:int):xActor { return dictAct[id]; }
public function updateVec(vec:Vector.<xActor>):void
{ var bRemDead:Boolean; bRemDead = false;
var i:int; var num:int; var a:xActor; num = vec.length;
for (i = 0; i < num; i++) { a = vec[i]; if (a.dead) { bRemDead = true; continue; }
if (a.asleep) { continue; } a.update(); }//nexti
if (bRemDead == false) { return; }
var k:int; num = vec.length;
for (i = 0; i < num; i++) { a = vec[i]; if (a.dead == false) { continue; }
for (k = i; k < num-1; k++){ vec[k] = vec[k + 1]; }
i -= 1; a.remove(); vec.pop(); num = vec.length;
delete dictAct[a.id]; }//nexti
}//update
public function checkCol(b:xActor, 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.dead) {continue;} if (a==b) {continue;}
if (b.cx + b.xrad < a.cx - a.xrad) { continue; } if (b.cx - b.xrad > a.cx + a.xrad) { continue; }
if (b.cy + b.yrad < a.cy - a.yrad) { continue; } if (b.cy - b.yrad > a.cy + a.yrad) { continue; }
return a;
}//nexti
return null;
}//checkcol
}//classend
}
internal class xActor
{
public var game:FlashTest = null;
public var cx:Number = 0; public var cy:Number = 0;
public var vx:Number = 0; public var vy:Number = 0;
public var xrad:Number = 8; public var yrad:Number = 8;
public var id:int = 0;
public var dead:Boolean = false; public var asleep:Boolean = false;
public var visible:Boolean = true;
public var team:int = 0; public var ownerid:int = 0;
public function init():void {} public function update():void {}
public function remove():void {}
}//xactor
internal class xShip extends xActor
{
override public function update():void
{
if (team ==0)
{
var a:xActor;
a = game.checkCol(this, game.vecAct2);
if (a!=null) { dead=true; a.dead=true; }
}//endif
cx+=vx; cy+=vy;
if (cx<-32||cx>=512||cy<-32||cy>=512)
{
var ta:Number;
ta = Math.atan2(230-cy,230-cx);
vx =Math.cos(ta); vy = Math.sin(ta);
return;
}//endif
}//update
}//xship