package ffffff.exp { import flash.filters.GlowFilter; import flash.filters.ColorMatrixFilter; import flash.display.SpreadMethod; import flash.geom.Matrix; import flash.display.GradientType; import flash.display.Graphics; import flash.display.Sprite; import flash.utils.ByteArray; import flash.media.SoundMixer; import flash.net.URLRequest; import flash.media.Sound; import flash.filters.DisplacementMapFilter; import flash.filters.BlurFilter; import flash.display.BitmapDataChannel; import flash.events.Event; import flash.display.Bitmap; import flash.display.BitmapData; import flash.geom.Point; import flash.display.MovieClip; import flash.display.DisplayObject; /** * @author white */ public class FineDay extends MovieClip { private const WIDTH:Number = 900; private const HEIGHT:Number = 500; private var output : BitmapData = new BitmapData(WIDTH, HEIGHT,false,0); private var map:BitmapData = new BitmapData(WIDTH, HEIGHT,false,0xFF0080); private var bg:BitmapData = new BitmapData(WIDTH, HEIGHT,false,0xFF0080); private var pixels:Array = []; private var num:Number = 1000; private var movePoint1:Point = new Point(0, 0); private var movePoint2:Point = new Point(0, 0); private var origin : Point = new Point(0, 0); private var blur : BlurFilter; private var snd : Sound; private var radius:Number = 350; private var wave:BitmapData = new BitmapData(WIDTH, HEIGHT,true,0x00000000); private var dotsBmp:BitmapData = new BitmapData(WIDTH, HEIGHT,true,0x00FFFFFF); private var glow : GlowFilter; private var circle : Sprite; public function FineDay() { for(var i:Number = 0;i.5? 1 : -1); var ty:Number = HEIGHT/2 + (Math.random() * HEIGHT / 2 - 200)*k - k*200; var p:Object = {x:tx, y:ty, speed:Math.random()*20+5}; pixels.push(p); } var bgFill : Sprite = new Sprite(); var fillType:String = GradientType.LINEAR; var colors:Array = [0xFF0000, 0xFF00FF]; var alphas:Array = [1, 1]; var ratios:Array = [0x00, 0xFF]; var matr : Matrix = new Matrix(); matr.createGradientBox(WIDTH, HEIGHT, Math.PI/2, 0, 0); var spreadMethod:String = SpreadMethod.PAD; bgFill.graphics.beginGradientFill(fillType, colors, alphas, ratios, matr, spreadMethod); bgFill.graphics.drawRect(0, 0, WIDTH, HEIGHT); bg.draw(bgFill); addChild(new Bitmap(output)); blur = new BlurFilter(5,5,3); glow = new GlowFilter(0x0066FF,1,6,6,22,1,false); circle = new Sprite(); circle.graphics.beginFill(0x66FFFF); circle.graphics.drawCircle(0, 0, 0.5); circle.filters = [glow]; snd = new Sound(new URLRequest("It's a fine day.mp3")); snd.play(0,99); addEventListener(Event.ENTER_FRAME, loop); loop(); } private function loop(event : Event = null) : void { dotsBmp.fillRect(dotsBmp.rect, 0x00000000); spectrum(); movePoint1.offset( .1, .1); movePoint2.offset(.2, -.1); var displace : DisplacementMapFilter = new DisplacementMapFilter(map,origin,BitmapDataChannel.RED, BitmapDataChannel.BLUE,13,-13); output.applyFilter(output, output.rect, origin, displace); for(var i:Number = 0; iWIDTH) p.x -= WIDTH ; if(p.x<0) p.x += WIDTH ; if(p.y > HEIGHT) p.y -= HEIGHT ; if(p.y <0) p.y += HEIGHT ; var blueColor:Number =0xFF- Math.abs(p.y - HEIGHT / 2) * 0xFF / (HEIGHT/2) ; dotsBmp.setPixel32(p.x, p.y, Number("0xFF" + (blueColor*2).toString(16) + "FF" + blueColor.toString(16))); } output.draw(dotsBmp); } private function spectrum() : void { var bytes : ByteArray = new ByteArray(); SoundMixer.computeSpectrum(bytes); map.copyPixels(bg, bg.rect, origin); var sp : Sprite = new Sprite(); var gr : Graphics = sp.graphics; var step:Number = WIDTH/256; var yOffset:Number = HEIGHT/2; gr.beginFill(0xFF00FF); gr.moveTo(0, HEIGHT / 2-yOffset); for(var i:int = 0; i<256; i++) { var fl:Number = Math.abs( bytes.readFloat() ); gr.lineTo(i*step, fl* radius + HEIGHT / 2-yOffset); } gr.lineTo(WIDTH, HEIGHT /2-yOffset); gr.lineTo(0, HEIGHT/2-yOffset); gr.endFill(); gr.moveTo(0, HEIGHT/2 + yOffset) gr.beginFill(0xFF0000); for(i = 0; i<256;i++) { fl = -Math.abs( bytes.readFloat() ); gr.lineTo(i*step, fl * radius + HEIGHT/2+yOffset); } gr.lineTo(WIDTH, HEIGHT /2+yOffset); gr.lineTo(0, HEIGHT/2+yOffset); gr.endFill(); wave.draw(sp); wave.applyFilter(wave, wave.rect, origin, blur); var cm : ColorMatrixFilter = new ColorMatrixFilter([ 1,0,0,0,0, 0,1,0,0,0, 0,0,1,0,0, 0,0,0,.9,0]); wave.applyFilter(wave, wave.rect, origin, cm); map.draw(wave); } } }