flash on 2009-7-16 dan_martin forked:1favorite:0lines:186license : MIT License modified : 2009-07-17 00:51:54 Embed Tweet package { import flash.display.Sprite; import flash.display.*; import flash.events.*; import flash.text.TextField; import gs.*; import flash.utils.Timer; public class FlashTest extends Sprite { private var ship:Sprite; private var ship_speed:Number; private var key_down:Boolean = false; private var score:int; private var MIN_X:int = 12; private var MAX_X:int = 420; private var MIN_Y:int = 12; private var MAX_Y:int = 420; private var BULLET_SPEED:int = 15; private var MAX_ALIENS:int = 10; private var ALIEN_SPEED:int = 5; private var aliens:Array = new Array(); private var respawnTimer:Timer; public function FlashTest() { // set the score score = 0; var tf:TextField = new TextField(); tf.name = "tf"; addChild(tf); updateScore(); // set up the ship ship = null; reSpawn(null); // set up the timer to create aliens respawnTimer = new Timer (2000); respawnTimer.addEventListener ( TimerEvent.TIMER, reSpawn ); respawnTimer.start(); stage.addEventListener (KeyboardEvent.KEY_DOWN,keyDownHandler); stage.addEventListener (KeyboardEvent.KEY_UP,keyUpHandler); this.addEventListener (Event.ENTER_FRAME, update); // respawn once to begin the game reSpawn(null); } private function update(e:Event):void { this.ship.x += this.ship_speed; if (!key_down && this.ship_speed > 0) this.ship_speed-=0.5; if (this.ship.x < MIN_X || this.ship.x > MAX_X) { this.ship_speed = 0-(this.ship_speed*0.75); key_down = false; } } private function keyDownHandler (e:KeyboardEvent):void { if (e.keyCode == 37 && this.ship.x > MIN_X) { // left ship_speed += -2; if (ship_speed < -10) ship_speed = -10; key_down = true; } if (e.keyCode == 39 && this.ship.x < MAX_X) { // right ship_speed += 2; if (ship_speed > 10) ship_speed = 10; key_down = true; } if (e.keyCode == 32) { // space fire(); } } private function keyUpHandler (e:KeyboardEvent):void { key_down = false; } private function fire():void { var bullet:Sprite = new Sprite(); bullet.graphics.beginFill(0x00FF00); bullet.graphics.drawRect(0,0,4,10); bullet.graphics.drawRect(20,0,4,10); bullet.x = ship.x; bullet.y = ship.y; bullet.addEventListener(Event.ENTER_FRAME, moveBullet); addChild(bullet); } private function moveBullet(e:Event):void { var bullet:Sprite = e.currentTarget as Sprite; bullet.y -= BULLET_SPEED; if (bullet.y < 0) { // off the top of the screen - destroy it bullet.parent.removeChild(bullet); } // check for alien collisions var killedAlien:Boolean = false; for (var i:int =0; i<MAX_ALIENS; i++) { if (!killedAlien && aliens[i] != null && aliens[i].hitTestObject(bullet)) { aliens[i].parent.removeChild(aliens[i]); bullet.parent.removeChild(bullet); aliens[i] = null; killedAlien = true; bullet.removeEventListener(Event.ENTER_FRAME, moveBullet); score += 100; updateScore(); } } } private function updateScore():void { var tf:Object = getChildByName("tf"); tf.text = "Score - "+score; } private function reSpawn(e:Event):void { // respawn ship if (ship == null) { // create the ship ship = new Sprite(); ship.graphics.beginFill(0x00FF00); ship.graphics.moveTo(0,25); ship.graphics.lineTo(12,0); ship.graphics.lineTo(25,25); ship.graphics.lineTo(25,15); ship.graphics.moveTo(25,25); ship.graphics.lineTo(0,25); ship.graphics.lineTo(0,15); ship.x=100; ship.y=400; ship_speed = 0; key_down = false; addChild(ship); } // respawn aliens for (var i:int =0; i<MAX_ALIENS; i++) { if (aliens[i] == null) { // create an alien var alien:Sprite = new Sprite(); alien.x = Math.floor(Math.random() * MAX_X); alien.y = Math.floor(Math.random() * (MAX_Y/2)); alien.graphics.beginFill(0x00FF00); alien.graphics.moveTo(0,0); alien.graphics.lineTo(12,15); alien.graphics.lineTo(25,0); alien.graphics.lineTo(25,10); alien.graphics.moveTo(25,0); alien.graphics.lineTo(0,0); alien.graphics.lineTo(0,10); // give it a direction alien.rotationZ = Math.floor(Math.random() * 360) - 180; // event listener to move it alien.addEventListener(Event.ENTER_FRAME, moveAlien); aliens[i] = alien; addChild(alien); return; // no more aliens this time around } } } private function moveAlien(e:Event):void { var alien:Sprite = e.currentTarget as Sprite; alien.x += Math.floor ( ALIEN_SPEED * Math.sin(alien.rotationZ)); alien.y += Math.floor ( ALIEN_SPEED * Math.cos(alien.rotationZ)); if (alien.x < MIN_X) { alien.rotationZ += 180; alien.x = MIN_X; } if (alien.x > MAX_X) { alien.rotationZ -= 180; alien.x = MAX_X; } if (alien.y < MIN_Y) { if (alien.rotationZ < 0) { alien.rotationZ -= 90; } else { alien.rotationZ += 90; } alien.y = MIN_Y; } if (alien.y > MAX_Y) { if (alien.rotationZ < 0) { alien.rotationZ += 90; } else { alien.rotationZ -= 90; } alien.y = MAX_Y; } // check for collision with player if (alien.hitTestObject (ship)) { // just take away a bit of their score score -= 1000; updateScore(); // and kill the ship for a bit ship.parent.removeChild(ship); ship = null; } } } } Code Fullscreen Preview Fullscreen rotationZ currentTarget keyCode Math.floor hitTestObject lineTo KeyboardEvent getChildByName drawRect removeEventListener KeyboardEvent.KEY_UP addChild KeyboardEvent.KEY_DOWN removeChild Event.ENTER_FRAME addEventListener moveTo Boolean start name sort new page view favorite forked pv199 forked from: flash on 2009-7-1.. mtarbit forked:0 favorite:0lines:187 (diff:5)