flash on 2015-11-26
♥0 |
Line 97 |
Modified 2015-11-26 06:53:45 |
MIT License
archived:2017-03-30 11:41:20
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/CytV
*/
package {
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);
var i:int; var num:int; var a:xActor;
vecAct = new Vector.<xActor>(0, false);
num = 256;
for(i=0;i<num;i+=1)
{
a = new xActor(); vecAct.push(a);
a.hp = 16+Math.random();
a.tx = Math.random()*mw;
a.ty = Math.random()*mh;
a.vx=Math.random() < 0.5 ? 1:-1;
a.vy=Math.random() < 0.5 ? 1:-1;
}//nexti
stage.addEventListener(Event.ENTER_FRAME, onEnter);
}//ctor
public var deb:TextField;
public var mw:int = 16;
public var mh:int = 16;
public var cw:Number = 32;
public var ch:Number = 32;
public var vecGrid:Vector.<int>=new Vector.<int>(16*16,false);
public var actGrid:Vector.<xActor>=new Vector.<xActor>(16*16,false);
public var vecAct:Vector.<xActor>;
public var gt:int = 0;
public var wait:int =0;
public function setAct(ax:int, ay:int, a:xActor):void
{ if(ax<0||ay<0||ax>=mw||ay>=mh){return;} actGrid[ax+(ay*mw)]=a; }
public function getAct(ax:int, ay:int):xActor
{ if(ax<0||ay<0||ax>=mw||ay>=mh){return null;} return actGrid[ax+(ay*mw)]; }
public function onEnter(e:Event):void
{
wait+=1; if(wait<8){return;} wait =0;
deb.text = ""+vecAct.length;
graphics.clear();
graphics.lineStyle(2,0);
var num:int; var a:xActor;
var i:int; var k:int;
var yt:int; var t:int;
num =vecAct.length;
for (i=0;i<num;i+=1)
{
a = vecAct[i];
setAct(a.tx,a.ty,null);
if (a==null || a.hp<0) {
for (k=i;k<num-1;k+=1) { vecAct[k]=vecAct[k+1]; }
vecAct.pop(); num-=1; i-=1;
continue;
}//endif
var b:xActor;
b = getAct(a.tx+a.vx,a.ty+a.vy);
if (b!=null){b.hp=-1;}
a.tx+=a.vx; a.ty+=a.vy;
if (a.vx<0&&a.tx<0){a.tx=0;a.vx*=-1;}
if (a.vx>0&&a.tx>=mw){a.tx=mw-1;a.vx*=-1;}
if (a.vy<0&&a.ty<0){a.ty=0;a.vy*=-1;}
if (a.vy>0&&a.ty>=mh){a.ty=mh-1;a.vy*=-1;}
setAct(a.tx,a.ty, a);
}//nexti
for(i=0;i<mh;i+=1)
{
yt = i * mw;
for (k=0;k<mw;k+=1)
{
t = vecGrid[yt+k];
graphics.drawRect(k*cw,i*ch,cw,ch);
a = actGrid[yt+k];
if (a != null) {
graphics.beginFill(a.col, 1);
graphics.drawCircle(k*cw+cw*0.5,i*ch+ch*0.5,8);
graphics.endFill();
}//endif
}//nextk
}//nexti
gt +=1;
}//onenter
}//classend
}
internal class xActor
{
public var tx:int = 0;
public var ty:int = 0;
public var hp:Number = -1;
public var vx:int = 0;
public var vy:int = 0;
public var col:uint = Math.random()*0xffFFffFF;
public var spec:int = 0;
}//xact