Forked from: miyaoka 's Walker diff:322 WalkerPlanet 背景色のRGBから3つのBGMのボリュームを制御する miyaoka forked:1 favorite:3 lines:267 license : MIT License modified : 2009-03-06 22:41:01 /* 背景色のRGBから3つのBGMのボリュームを制御する */ package { import flash.display.Bitmap; import flash.display.Sprite; import flash.events.Event; import flash.geom.Point; import flash.display.BitmapData; import flash.geom.Matrix; import flash.filters.GlowFilter; [SWF(width = "465", height = "465", backgroundColor = 0x000000, frameRate = "60")] public class WalkerPlanet extends Sprite { public function WalkerPlanet() { var planetR:Number = 300; var spaceR:Number = stage.stageHeight + planetR * Math.SQRT2; var groundY:Number = 400; //space var space:Space = new Space(planetR, spaceR); space.rotation = 90; //walker var walker:Walker = new Walker(); space.x = walker.x = stage.stageWidth / 2; space.y = planetR + groundY; walker.y = groundY; //bgm var bgm:BGM = new BGM(); //current RGB var bd:BitmapData = new BitmapData(1, 1); var bmp:Bitmap = new Bitmap(bd); bmp.width = bmp.height = 20; bmp.x = 10; bmp.y = stage.stageHeight - 30; bmp.filters = [ new GlowFilter(0xFFFFFF, 1, 2, 2, 5) ]; //add addChild(space); addChild(walker); addChild(bmp); stage.addEventListener(Event.ENTER_FRAME, function():void { var t:Number = Math.tan(-Math.PI/ 2 + space.rotation * Math.PI / 180); space.rotation -= walker.mouseX * 0.002; var mtx:Matrix = new Matrix(); mtx.rotate( -( - space.rotation * Math.PI / 180)); mtx.translate(0, groundY + planetR - 150); bd.draw(space,mtx); bgm.setVols(bd.getPixel(0, 0)); }); } } } import flash.display.Sprite; import flash.events.Event; import flash.geom.Point; import flash.events.TimerEvent; import flash.media.SoundChannel; import flash.geom.Matrix; import flash.display.GradientType; import flash.display.SpreadMethod; import flash.display.InterpolationMethod; import flash.media.Sound; import flash.net.URLRequest; class BGM extends Object { /* "a quiet satellite is passing above" by mic http://www.dance-industries.com/view_artist.php?ID=4554&track=16906 "eastern feel" by mic http://www.dance-industries.com/view_artist.php?ID=4554&track=16909 "Metro" by Djfredse http://www.dance-industries.com/view_artist.php?ID=6016&track=26322 */ private var r:SndVol = new SndVol(new URLRequest( "http://www.t-p.jp/wonderfl/sound/loop/a quiet satellite is passing above.mp3")); private var g:SndVol = new SndVol(new URLRequest( "http://www.t-p.jp/wonderfl/sound/loop/eastern feel.mp3")); private var b:SndVol = new SndVol(new URLRequest( "http://www.t-p.jp/wonderfl/sound/loop/Metro.mp3")); public function BGM():void { r.setVol(0.0); g.setVol(0.0); b.setVol(0.0); } public function setVols(vol:uint):void { b.setVol(Math.min(0.3, Math.max(0.05, Math.pow((vol & 0xFF) / 255, 2) ) ), 0); vol >>= 8; g.setVol(Math.min(0.3, Math.max(0.0, Math.pow((vol & 0xFF) / 255, 2) )), -1.0 ); vol >>= 8; r.setVol(Math.min(0.3, Math.max(0.05, Math.pow(vol / 255, 2) )), 1.0); } } import flash.media.SoundLoaderContext; import flash.media.SoundTransform; class SndVol extends Sound { private var sc:SoundChannel; public function SndVol(stream:URLRequest = null, context:SoundLoaderContext = null) : void { super(stream, context); sc = play(0, 100); } public function setVol(vol:Number = 1.0, pan:Number = 0):void { var st:SoundTransform = sc.soundTransform; st.volume = vol; st.pan = pan; sc.soundTransform = st; } } import flash.events.MouseEvent class Space extends Sprite { public function Space(planetR:Number, spaceR:Number):void { //planet var planet:Planet = new Planet(); planet.width = planet.height = planetR * 2; //sky var sky:Sky = new Sky(spaceR); sky.addEventListener(Event.ENTER_FRAME, function():void { sky.rotation += 360 / 60 / 60; }); addEventListener(MouseEvent.MOUSE_DOWN, function ():void { sky.draw(spaceR); }); //add addChild(sky); //bldgs for (var i:uint = 0; i < 30; i++) { var bldg:Bldg = new Bldg(); var rad:Number = Math.random() * Math.PI * 2; var pt:Point = Point.polar(planetR -10, rad); bldg.width = (Math.random() * 0.8 + 0.2) * 100; bldg.height = (Math.random() * 0.7 + 0.3) * 100; bldg.x = pt.x; bldg.y = pt.y; bldg.rotation = rad * 180 / Math.PI + 90; addChild(bldg); } addChild(planet); } } class Sky extends Sprite { public function Sky(spaceR:Number):void { draw(spaceR); } public function draw(spaceR:Number ):void { var mtr:Matrix = new Matrix(); mtr.createGradientBox(spaceR * 4, spaceR * 4, 0, -spaceR * 2, -spaceR * 2 * 0.5); var colors:Array = new Array(); var alphas:Array = new Array(); var ratios:Array = new Array(); var r:Number = 255; var g:Number = 255; var b:Number = 255; var minRatio:Number = 27 + Math.random()*18; var maxRatio:Number = 220 + Math.random()*12; var ratioSpan:Number = maxRatio - minRatio; var ratio:Number = minRatio; //white colors.push(0xFFFFFF); alphas.push(1); ratios.push(minRatio-1); //grd var num:uint = 3 + Math.floor(Math.random() * 7); for (var i:uint = 0; i < num; i++) { ratio = minRatio + ratioSpan * (i / num); var rgbVol:Number = 255 * (maxRatio - ratio) / ratioSpan; r = (Math.random() * 0.9 + 0.1) * rgbVol; g = (Math.random() * 0.9 + 0.1) * rgbVol; b = (Math.random() * 0.9 + 0.1) * rgbVol; colors.push(uint(r) * 0x10000 + uint(g) * 0x100 + uint(b)); alphas.push(1.0); ratios.push(ratio); } //black colors.push(0); alphas.push(1); ratios.push(maxRatio); graphics.clear(); graphics.beginGradientFill( GradientType.RADIAL, colors, alphas, ratios, mtr ); graphics.drawCircle(0, 0, spaceR); } } class Planet extends Sprite { public function Planet():void { graphics.beginFill(0x333333); graphics.drawCircle(0, 0, 100); } } class Bldg extends Sprite { public function Bldg():void { var vol:Number = Math.random() * 0x10 + 0x10; graphics.beginFill( (vol << 16) + (vol << 8) + vol //((Math.random() * 0.2 + 0.1) * 255 << 16) //+ ((Math.random() * 0.2 + 0.1) * 255 << 8) //+ ((Math.random() * 0.2 + 0.1) * 255) ); graphics.drawRect( -50, -100, 100, 100); } } class Walker extends Sprite { private var rad:Number; private var r:Number = 0; private const PI2:Number = Math.PI * 2; private var speed:Number = 0.05; private var rAdd:Number = Math.PI * speed; private var legs:Sprite = new Sprite(); private var body:Sprite = new Sprite(); public function Walker():void { //body body.graphics.beginFill(0)//x666666); body.graphics.drawRoundRect(-40, 0, 80, 60, 60, 60); body.graphics.beginFill(0xFFFFFF); body.graphics.drawCircle( -20, 20, 4); body.graphics.drawCircle( 20, 20, 4); //legs var legNum:uint = 4; for (var i:uint = 0; i < legNum; i ++) { var leg:Leg = new Leg(); leg.r = PI2 * (i *1.5) / legNum; leg.length = 100; leg.rMul = Math.random() + 0.2; legs.addChild(leg); } //add addChild(body); addChild(legs); addEventListener(Event.ENTER_FRAME, enterFrameHandler); // enterFrameHandler(null); } private function enterFrameHandler(e:Event):void { var d:Number = (mouseX - legs.x) * 0.01; // legs.x += d; // body.x = legs.x; r = (r + d * 0.02 ) % PI2; legs.graphics.clear(); var heights:Array = new Array(); for (var i:uint; i < legs.numChildren; i++) { var leg:Leg = legs.getChildAt(i) as Leg; var pt:Point = Point.polar(leg.length/2, Math.abs(Math.sin(r + leg.r)) * (i %2 ==0 ? -1 : 1) *1.0 + Math.PI / 2); var lx:Number = (Math.ceil(i/2)) * 60 / legs.numChildren * ((i % 2 == 0) ? 1 : -1) + ((legs.numChildren % 2 == 0) ? 30/ legs.numChildren : 0); legs.graphics.moveTo(lx, 0); legs.graphics.lineStyle(16, 0); legs.graphics.lineTo(lx + pt.x, pt.y); legs.graphics.lineTo(lx, pt.y*2); heights.push(pt.y*2) } heights.sort(Array.NUMERIC | Array.DESCENDING); legs.y = - heights[0]; body.y = legs.y - body.height *0.75; } } class Leg extends Sprite { public var r:Number; public var length:Number; public var rMul:Number; public function Leg():void { } } Code Fullscreen Preview Fullscreen vasylbo k0rin paq : 凄い! Math.max MouseEvent.ENTER_FRAME Math.min Math.PI Math.pow SoundTransform volume pan URLRequest Math.SQRT2 Math.tan push Array.DESCENDING Array.NUMERIC sort Math.ceil rotate translate GlowFilter Matrix sort new page view favorite forked pv 544 forked from: WalkerPlanet mantasku forked:0 favorite:0 lines:267 ( diff:1 )