flash on 2014-12-5
♥0 |
Line 150 |
Modified 2014-12-05 06:25:20 |
MIT License
archived:2017-03-30 11:52:02
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/cRVL
*/
package {
import flash.text.TextField;
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 i:int;
vecKey = new Vector.<Boolean>(0,false);
for (i =0;i<512;i++) {vecKey.push(false);}
curRecord = new xRecord();
deb = new TextField();
deb.width=320;
deb.height=240;
deb.mouseEnabled=false;
addChild(deb);
stage.addEventListener(KeyboardEvent.KEY_UP, onKup);
stage.addEventListener(KeyboardEvent.KEY_DOWN, onKdown);
stage.addEventListener(Event.ENTER_FRAME, onEnter);
}//ctor
public function onKup(e:KeyboardEvent):void { vecKey[e.keyCode] = false; }
public function onKdown(e:KeyboardEvent):void { vecKey[e.keyCode] = true; }
public function isKeyDown(k:int):Boolean
{ if (k < 0 || k >=512) {return false;} return vecKey[k]; }
public var vecKey:Vector.<Boolean>;
public var keyUp:Boolean = false;
public var keyDown:Boolean = false;
public var keyLeft:Boolean = false;
public var keyRight:Boolean = false;
public var prevKey:int = 0;
public var curRecord:xRecord;
public var myAgent:xAgent;
public var cx:Number = 230;
public var cy:Number = 230;
public var state:int = 0;
public var deb:TextField;
public function onEnter(e:Event):void
{
keyUp = isKeyDown(Keyboard.UP);
keyDown = isKeyDown(Keyboard.DOWN);
keyLeft = isKeyDown(Keyboard.LEFT);
keyRight = isKeyDown(Keyboard.RIGHT);
graphics.clear();
graphics.lineStyle(2, 0);
graphics.drawRect(32,32, 400,400);
if (state ==1)
{
graphics.beginFill(0xFF0000,1); graphics.drawRect(40,40,32,32); graphics.endFill();
}
var curKey:int;
curKey = 0;
if (keyUp) { curKey |= 1; }
if (keyDown) { curKey |= 2; }
if (keyLeft) { curKey |= 4; }
if (keyRight) { curKey |= 8; }
if (curKey != 0 && state == 0) {state = 1; }
if (state == 1)
{
curRecord.addFrame(curKey, cx, cy);
curRecord.gt += 1;
}
if (curRecord.gt >= 60)
{
myAgent = new xAgent();
myAgent.rec = curRecord;
myAgent.rec.gt = 0;
// deb.text = "" + curRecord.vecKey.length;
curRecord = new xRecord();
state = 2;
}//endif
if (keyUp) { cy-=8; }
if (keyDown) { cy+=8; }
if (keyLeft) { cx-=8; }
if (keyRight) { cx+=8; }
graphics.beginFill(0,1);
graphics.drawCircle(cx,cy, 8);
graphics.endFill();
graphics.lineStyle(2, 0xFF0000);
if (myAgent != null)
{
var f:xFrame;
f = myAgent.rec.getFrame(myAgent.rec.gt);
deb.text = ""+f;
if (f == null) { myAgent.rec.gt=0; return;}
myAgent.rec.gt += 1;
curKey = f.key;
if (myAgent.rec.gt > myAgent.rec.vecKey.length)
{
myAgent.rec.gt = 0;
}//endif
keyUp = (curKey & 1) > 0;
keyDown = (curKey & 2) > 0;
keyLeft = (curKey & 4) > 0;
keyRight = (curKey & 8) > 0;
myAgent.cx = f.cx;
myAgent.cy = f.cy;
if (keyUp) { myAgent.cy-=8; }
if (keyDown) { myAgent.cy+=8; }
if (keyLeft) { myAgent.cx-=8; }
if (keyRight) { myAgent.cx+=8; }
graphics.beginFill(0x800000,1);
graphics.drawCircle(myAgent.cx,myAgent.cy, 8);
graphics.endFill();
}//myagent
var vec:Vector.<xFrame>;
var i:int; var num:int;
if (myAgent == null ) { vec = curRecord.vecKey;}
else { vec = myAgent.rec.vecKey;}
num = vec.length
for (i = 0; i < num; i++)
{
f = vec[i];
graphics.drawCircle(f.cx,f.cy,4);
}//nexti
}//onenter
}//classend
}
internal class xAgent
{
public var rec:xRecord;
public var cx:Number = 0;
public var cy:Number = 0;
}//xagent
internal class xFrame
{
public var cx:Number = 0;
public var cy:Number = 0;
public var key:int =0;
}//frame
internal class xRecord
{
public var vecKey:Vector.<xFrame> = new Vector.<xFrame>(0,false);
public var gt:int = 0;
public function addFrame(kflag:int, ax:Number, ay:Number):void
{
var a:xFrame;
a =new xFrame();
a.cx= ax; a.cy = ay;
a.key = kflag;
vecKey.push(a);
}//addkey
public function getFrame(t:int):xFrame
{
var a:xFrame;
if (t < 0) { return vecKey[0]; }
if (t >= vecKey.length) { return vecKey[vecKey.length-1]; }
a = vecKey[t];
return a;
}//getFrame
}//xrecord