// forked from zsp's flash on 2009-6-14 package { import flash.display.Sprite; import flash.events.Event; [SWF(width = "465", height = "465", backgroundColor = "0x000000", frameRate = "60")] public class FlashTest extends Sprite { public function FlashTest() { main = this; initialize(); addEventListener(Event.ENTER_FRAME, update); } } } import flash.display.Sprite; import flash.events.Event; import flash.display.Bitmap; import flash.display.BitmapData; import flash.geom.ColorTransform; import flash.geom.Rectangle; import flash.geom.Point; const WND_W :int = 465; const WND_H :int = 465; const WND_HALF_W :int = WND_W/2; var main :Sprite; var screen :BitmapData = new BitmapData(WND_W,WND_H, true, 0); var back_screen :BitmapData = new BitmapData(WND_W,WND_H, false, 0); var back_screen_back_buffer :BitmapData = new BitmapData(WND_W,WND_H, false, 0); var ct:ColorTransform = new ColorTransform(.98, .85, .97, 0.985); var bullets :Vector.<Bullet> = new Vector.<Bullet>; var bg :BulletGenerator var frame :int = 0; var phase :int = 0; function initialize():void{ main.addChild(new Bitmap(back_screen)); main.addChild(new Bitmap(screen)); drawBackground(); } function update(e:Event): void{ var sy:int = WND_H - frame%WND_H; back_screen.copyPixels(back_screen_back_buffer, new Rectangle(0, sy, WND_W, WND_H), new Point(0, 0)); back_screen.copyPixels(back_screen_back_buffer, new Rectangle(0, 0, WND_W, sy), new Point(0, WND_H-sy)); screen.colorTransform(screen.rect, ct); var f: int = frame %2000; if (f==0) bg = new BG01(); if (f==500) bg = new BG02(); if (f==1000) bg = new BG03(); if (f==1500) bg = new BG04(); bg.generate(); var i:int = bullets.length; while(i--){ bullets[i].move(); if(bullets[i].dead) bullets.splice(i,1); } frame++; } function drawBackground():void{ var box_sz:int = 40; for(var i:int = 0; i< 500; i++){ var x:int = Math.random()*WND_HALF_W; var y:int = Math.random()*WND_H; var c:int = Math.random()*0x7F; var r:Rectangle = new Rectangle(x-box_sz/2, y-box_sz/2,box_sz,box_sz); back_screen_back_buffer.fillRect(r,c); back_screen_back_buffer.copyPixels(back_screen_back_buffer,new Rectangle(0,0,WND_HALF_W, WND_H), new Point(WND_HALF_W,0)); } } class BulletGenerator{ public function generate():void{} } class BG01 extends BulletGenerator{ override public function generate():void{ var vx :Number = Math.random()*4-2; var vy :Number = Math.random()*4-2; var vz :Number = Math.random()*0.1-0.05; var b:Bullet = new Bullet(116,140,10,vx,vy,vz); bullets.push(b); } } class BG02 extends BulletGenerator{ private var vz:Number =-0.02; private var p:int = 0; override public function generate():void{ if (frame %30 ==0) { vz = -vz; p =(p+1)%2; for(var i:int = 0; i< 50; i++){ var r:Number = (i*2*Math.PI)/50+ p*0.2; var b:Bullet = new Bullet(116+vz*500,140,10-vz*100,Math.cos(r),Math.sin(r),vz); bullets.push(b); } } } } class BG03 extends BulletGenerator{ override public function generate():void{ if (frame%3 ==0){ var b: Bullet; b = new Bullet(116,140,8,Math.cos(frame),Math.sin(frame),0); bullets.push(b); b = new Bullet(116,140,12,Math.cos(frame+Math.PI/2),Math.sin(frame+Math.PI/2),0); bullets.push(b); } } } class BG04 extends BulletGenerator{ private var p:int =-1; override public function generate():void{ if (frame %50==0){ p =-p; var b:Bullet; for(var i:int = 0; i<10; i++){ var r:Number = (i*0.5*Math.PI/10)+Math.PI/4; b = new Bullet(116+p*4,100,10,Math.cos(r), Math.sin(r), (i-5)*0.005*p); bullets.push(b); } } } } class Bullet{ public var x:Number; public var y:Number; public var z:Number; public var vx:Number; public var vy:Number; public var vz:Number; public var dead:Boolean; public function Bullet(tx:Number, ty:Number, tz:Number ,tvx:Number, tvy:Number, tvz:Number){ x = tx; y = ty; z = tz; vx = tvx; vy = tvy; vz = tvz; dead = false; } public function move():void{ if(x<0 || WND_HALF_W<x) dead = true; if(y<0 || WND_H<y) dead = true; if(z<0 || 20<z) dead = true; x +=vx; y +=vy; z +=vz; screen.setPixel32(x-z,y,0xFFFFFFFF); screen.setPixel32(x+WND_HALF_W+z,y, 0xFFFFFFFF); } } flash on 2009-6-15