flash on 2009-3-27 h_sakurai forked:1favorite:0lines:264license : All rights reserved modified : 2009-04-06 01:34:51 Embed Tweet package { import flash.display.Sprite; public class BitmapGame extends Sprite { public function BitmapGame() { main = this; initialize(); } } } import flash.display.BitmapData; import flash.display.Bitmap; import flash.events.Event; import flash.events.MouseEvent; import flash.geom.Rectangle; import flash.text.TextField; const W:int = 465; const H:int = 465; const BLUR_MAX:int = 8; const SHOT_MAX:int = 5; const SHOT2_MAX:int = 1; const BGLIGHT_MAX:int = 160; const GROUP_MAX:int = 7; const BULLETS:int = 6; const SHOTS:int = 5; const ENEMIES:int = 4; const SHIPS:int = 3; const PARTICLES:int = 2; const BLURS:int = 1; const BGS:int = 0; var screen:BitmapData = new BitmapData(W, H); var main:BitmapGame; var tf:TextField = new TextField(); function initialize():void { main.addChild(new Bitmap(screen)); main.addChild(tf); tf.width = tf.height = 100; tf.text = "111"; main.addEventListener(Event.ENTER_FRAME, update); main.stage.addEventListener(MouseEvent.MOUSE_DOWN, mouseDown); main.stage.addEventListener(MouseEvent.MOUSE_UP, mouseUp); for (var i:int = 0; i < BLUR_MAX; i++) { blurs[i]=new Vector.<Blur>(50); for(var j:int = 0; j < 50; j++) { blurs[i][j] = new Blur(); } } for (i = 0; i < SHOT_MAX; i++) { shots[i] = new Shot(); } for (i = 0; i < SHOT2_MAX; i++) { shot2s[i] = new Shot2(); } for (i = 0; i < BGLIGHT_MAX; i++) { bglights[i] = new BGLight(); } for (i = 0; i < GROUP_MAX; i++) { actors[i] = new Vector.<Actor>(); nextActors[i] = new Vector.<Actor>(); } ship.exists = true; actors[SHIPS].push(ship); } var mouse:Boolean; function mouseDown(e:Event):void { mouse = true; } function mouseUp(e:Event):void { mouse = false; } var rect:Rectangle = new Rectangle(0, 0, W, H); function fillRect(x:int, y:int, w:int, h:int, col:int):void { rect.x = x; rect.y = y; rect.width = w; rect.height = h; screen.fillRect(rect, col); } function update(e:Event):void { screen.lock(); screen.fillRect(screen.rect, 0xffdddddd) var i:int; var j:int; for(var g:int = 0; g < GROUP_MAX; g++) { if(g==BLURS){ for(i = 0; i < BLUR_MAX; i++){ var bs:Vector.<Blur> = blurs[(i+blurIdx)%BLUR_MAX]; for(j = 0; j < 50; j++) { var b:Blur = bs[j]; if(!b.exists)continue; b.update(); } } blurIdx = (blurIdx + 1) % BLUR_MAX; for(j = 0; j < 50; j++) { blurs[blurIdx][j].exists = false; } continue; } var acs:Vector.<Actor> = actors[g]; var len:int = acs.length; for(i = 0; i < len; i++) { acs[i].update(); if(acs[i].exists)nextActors[g].push(acs[i]); } acs.length = 0; } // for(j=0;j<4;j++) newBGLight(); var tmpActors:Vector.<Vector.<Actor>> = actors; actors = nextActors; nextActors = tmpActors; screen.unlock(); } var actors:Vector.<Vector.<Actor>>=new Vector.<Vector.<Actor>>(); var nextActors:Vector.<Vector.<Actor>>=new Vector.<Vector.<Actor>>(); class Actor { public var x:Number; public var y:Number; public var exists:Boolean = false; public function update():void{} } var ship:Ship = new Ship(); class Ship extends Actor { public override function update():void { x = main.stage.mouseX; y = main.stage.mouseY; fillRect(x-10, y-10, 20, 20, 0xffff8888); if(mouse){ newShot(x, y); newShot2(x, y); } newBlur(x, y, 0xffff8888, 10, 10); } } var blurs:Vector.<Vector.<Blur>> = new Vector.<Vector.<Blur>>(BLUR_MAX); var blurIdx:int = 0; function newBlur(x:Number, y:Number, col:int, w:int, h:int):void { var bs:Vector.<Blur> = blurs[blurIdx]; for(var i:int = 0; i < 50; i++) { if(!bs[i].exists) { var b:Blur = bs[i]; b.x = x; b.y = y; b.col = col; b.w = w; b.h = h; b.tick = 0; b.exists = true; break; } } } class Blur extends Actor { public var col:int; public var tick:int; public var w:int; public var h:int; public var l:int; public var vl:int = 2; public override function update():void { var r:int = (col>>16)&0xff; var g:int = (col>>8)&0xff; var b:int = (col)&0xff; var t:Number = 0.5 - tick / BLUR_MAX/2; var t2:Number = (1 - t) * (0xcc+l); r = r * t + t2; g = g * t + t2; b = b * t + t2; var c:int = (col & 0xff000000)|(r << 16)|(g << 8)|b; tick++; w+=2; h+=2; l+=vl; if(l > 20||l <= 0)vl=- vl; fillRect(x - w, y - h, w * 2, h * 2, c); } } var shots:Vector.<Shot> = new Vector.<Shot>(SHOT_MAX); function newShot(x:Number, y:Number):void { for(var i:int = 0; i < SHOT_MAX; i++) { if(!shots[i].exists) { var b:Shot = shots[i]; b.x = x; b.y = y; b.exists = true; nextActors[SHOTS].push(b); break; } } } class Shot extends Actor { public override function update():void { x+= 20; if(x > W) exists = false; fillRect(x-10, y-5, 20, 10, 0xff8888ff); newBlur(x, y, 0xffffffff, 10, 5); } } var shot2s:Vector.<Shot2> = new Vector.<Shot2>(SHOT2_MAX); function newShot2(x:Number, y:Number):void { for(var i:int = 0; i < SHOT2_MAX; i++) { if(!shot2s[i].exists) { var b:Shot2 = shot2s[i]; b.x = x; b.y = y; b.exists = true; b.vy = 0; nextActors[SHOTS].push(b); break; } } } class Shot2 extends Actor { public var vy:Number; public override function update():void { x+= 20; vy+=1; y+=vy; if(x > W || y > H) exists = false; fillRect(x-5, y-5, 10, 10, 0xff8888ff); newBlur(x, y, 0xffffffff, 10, 10); } } var bglights:Vector.<BGLight> = new Vector.<BGLight>(BGLIGHT_MAX); const XSPEED:int = 8; function newBGLight():void { for(var i:int = 0; i < BGLIGHT_MAX; i++) { if(!bglights[i].exists) { var b:BGLight = bglights[i]; b.exists = true; switch(i % 2){ case 0: b.vx = (Math.random() < 0.5 ? 1 : -1)*b.speed-XSPEED; b.vy = 0; b.x = W; b.y = int(H * Math.random()/8)*8; break; case 1: switch(int(Math.random()*4)){ // case 0: // b.x = int(W * Math.random()/8)*8; // b.y = H; // b.vy = -b.speed; b.vx = -20;break; // case 1: // b.x = int(W * Math.random()/8)*8; // b.y = -100; // b.vy = b.speed; b.vx = -XSPEED;break; default: b.x = W; b.y = int(H * Math.random()/8)*8; b.vy = (Math.random() < 0.5 ? 1 : -1)*b.speed; b.vx = -XSPEED;break; } } if(b.vx >= 0) { b.x = -100; } nextActors[BGS].push(b); break; } } } class BGLight extends Actor { public var speed:int = Math.random()*10+5; public var vx:int; public var vy:int; public override function update():void { //x += vx; y += vy; x -= XSPEED; if(vy != 0) fillRect(x,y,4,100, 0xffeeeeee); else fillRect(x,y,100,4, 0xffeeeeee); if(x < -100 || x > W || y < -100 || y > H) exists = false; } } Code Fullscreen Preview Fullscreen push mouseY mouseX Rectangle height width addEventListener MouseEvent.MOUSE_UP MouseEvent.MOUSE_DOWN MouseEvent.ENTER_FRAME Vector Boolean length TextField text Math.random Bitmap Number int sort new page view favorite forked pv223 forked from: flash on 2009-3-2.. h_sakurai forked:0 favorite:0lines:264 (diff:1)