flash on 2011-1-22
♥0 |
Line 118 |
Modified 2011-01-22 23:09:20 |
MIT License
archived:2017-03-20 17:26:16
ActionScript3 source code
/**
* Copyright hig_an ( http://wonderfl.net/user/hig_an )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/3EQI
*/
package {
import flash.display.Shape;
import flash.display.Sprite;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.geom.Matrix;
import flash.utils.Timer;
import flash.events.TimerEvent;
import flash.text.TextField;
import flash.text.TextFormat;
[SWF(backgroundColor='#000000', frameRate='30', width='465', height='465')]
public class Main extends Sprite {
private var numOfEnemy:int = 10;
private var circleSize:Number = 10;
private var timer:Timer = new Timer(200);;
private var bmpd:BitmapData;
private var sp:Shape;
private var sp2:Shape;
private var enemyList:Array;
private var mt:Matrix;
private var myUnit:Circle;
private var explosionList:Array;
private var score:int = 50;
private var tf:TextField;
public function Main() :void {
tf = new TextField();
tf.defaultTextFormat = new TextFormat("_typeWriter", 40, 0x0, true);
tf.autoSize = "left";
addChild(tf);
tf.text = score.toString();
tf.x = stage.stageWidth - tf.width;
bmpd = new BitmapData(465, 465, false, 0x0);
enemyList = new Array();
mt = new Matrix();
myUnit = new Circle(232, 465, 0);
myUnit.radius = circleSize * 2;
sp = newFig(0, 0, circleSize);
sp2 = newFig(0, 0, circleSize*2, 0x00FF00);
for (var i:int = 0; i < numOfEnemy; i++) {
enemyList[i] = new Circle(465 * Math.random(), - circleSize,10 * Math.random() + 1);
enemyList[i].radius = circleSize;
}
addChild(new Bitmap(bmpd));
addEventListener(Event.ENTER_FRAME, loop);
timer.addEventListener(TimerEvent.TIMER, onTimerEvent);
timer.start();
}
private function loop(e:Event) :void {
bmpd.lock()
bmpd.fillRect(bmpd.rect, 0xFFFFFF);
myUnit.x = mouseX; myUnit.y = mouseY;
mt.identity()
mt.translate(myUnit.x, myUnit.y);
bmpd.draw(sp2, mt);
for (var i:int = 0; i < enemyList.length; i++) {
enemyList[i].y += enemyList[i].vy + enemyList[i].y * enemyList[i].ay;
if (enemyList[i].y > 465) {
enemyList[i].y = - circleSize;
enemyList[i].x = 465 * Math.random();
tf.text = (score--).toString();
tf.x = stage.stageWidth - tf.width;
if (score == 0) {
tf.text = "0";
tf.textColor = 0xff0000;
removeEventListener(Event.ENTER_FRAME, loop);
}
}
mt.identity();
mt.translate(enemyList[i].x, enemyList[i].y);
bmpd.draw(sp, mt);
if (atari(myUnit, enemyList[i])) {
enemyList.splice(i, 1)
i--
tf.text = (score++).toString();
tf.x = stage.stageWidth - tf.width;
}
}
bmpd.unlock();
}
private function atari(unit:Circle,enemy:Circle):Boolean{
if ((enemy.x + enemy.radius > unit.x-unit.radius && enemy.x - enemy.radius < unit.x+unit.radius)
&& (enemy.y + enemy.radius > unit.y-unit.radius && enemy.y - enemy.radius < unit.y+unit.radius)) {
return true;
}else {
return false;
}
}
private function newFig(xx:Number,yy:Number,size:int,col:uint = 0xFF0000):Shape {
var s:Shape = new Shape();
s.graphics.beginFill(col);
s.graphics.drawCircle(xx, yy, size);
s.graphics.endFill();
return s;
}
private function onTimerEvent(e:TimerEvent):void {
enemyList.push(new Circle(465 * Math.random(), - circleSize,10 * Math.random() + 1));
}
private function explosion():void {
}
}
}
class Circle{
public var x:Number;
public var y:Number;
public var vx:Number;
public var vy:Number;
public var ax:Number;
public var ay:Number;
public var radius:Number;
public function Circle(xx:Number, yy:Number ,vvy:Number) {
x = xx;
y = yy;
vy = vvy;
ay = 0.05;
}
}