Toggle navigation
Sign Up
Log In
Explore
Works
Folders
Tools
Collections
Artists
Groups
Groups
Topics
Tasks
Tasks
Jobs
Teams
Jobs
Recommendation
More Effects...
ActionScript
/** * perlinNoiseで雷とか放電とか。 * ボタン押下中はスロー風味になります。 */ package { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; import flash.filters.GlowFilter; import flash.filters.DropShadowFilter; import flash.display.Graphics; public class Thunder extends Sprite { public function Thunder() { const NOISE_BIT:int = 7; const NOISE_RANGE:int = 1 << NOISE_BIT; const NOISE_MASK:int = NOISE_RANGE-1; var bmp:Bitmap = new Bitmap( new BitmapData(NOISE_RANGE, NOISE_RANGE)); bmp.bitmapData.perlinNoise(NOISE_RANGE, NOISE_RANGE, 8, Math.floor(Math.random() * 0xffff), true, true, 4 ); normalize( bmp.bitmapData ); var spr:Sprite = new Sprite(); addChild( spr ); var f0:Array = [new GlowFilter(0xffffff, 0.5, 16, 16, 1, 1),new GlowFilter(0xffff00, 1, 8, 8, 1, 1),new DropShadowFilter(0, 90, 0xcc3300, 1, 64, 64,5,3)]; var f1:Array = [new GlowFilter(0xffffff, 0.5, 16, 16, 1, 1),new GlowFilter(0x00ffff, 1, 8, 8, 1, 1),new DropShadowFilter(0, 90, 0x0033CC, 1, 64, 64,5,3)]; var ry:int = 0; var rx:int = 0; var baseX:int = stage.stageWidth / 2; var baseY:int = 0; var vx:Number = 0; var vy:Number = 1; var len:Number = 256; var ptn:int = 0; spr.filters = f0; graphics.beginFill(0x000000); graphics.drawRect(0,0,stage.stageWidth,stage.stageHeight); graphics.endFill(); stage.addEventListener( MouseEvent.MOUSE_DOWN, function( e:MouseEvent):void { ptn = 1; spr.filters = f1; }); stage.addEventListener( MouseEvent.MOUSE_UP, function( e:MouseEvent):void { ptn = 0; spr.filters = f0; }); stage.addEventListener( MouseEvent.MOUSE_MOVE, function( e:MouseEvent):void { var _dx:Number = mouseX - baseX; var _dy:Number = mouseY - baseY; var _len:Number = Math.sqrt(_dx * _dx + _dy * _dy); if ( _len != 0 ) { len = _len; vx = _dx / len; vy = _dy / len; } }); stage.addEventListener(Event.ENTER_FRAME, function(e:Event):void { if ( ptn == 0){ rx += Math.floor(Math.random() * 4); ry = Math.floor(Math.random() * NOISE_RANGE); }else { rx++; ry+=2; } rx &= NOISE_MASK; ry &= NOISE_MASK; var colBase:int = bmp.bitmapData.getPixel(rx, ry) & 0xff; spr.graphics.clear(); spr.graphics.lineStyle(Math.floor(Math.random() * 4) + 1, 0xffffff); var _x:Number = baseX; var _y:Number = baseY; spr.graphics.moveTo(_x, _y); for ( var i:int = 1; i < NOISE_RANGE; i++ ) { var c:int = ( bmp.bitmapData.getPixel((rx+i) & NOISE_MASK, ry) & 0xff ) -colBase; spr.graphics.lineTo(_x+c*vy, _y +c*-vx); _x += vx * len / NOISE_RANGE; _y += vy * len / NOISE_RANGE; } }); } private function normalize( data:BitmapData, range:int = 255 ):void { var min:int = 255; var max:int = 0; for ( var i:int = 0; i < data.height; i++ ) { for ( var j:int = 0; j < data.width; j++ ) { var col:int = data.getPixel(j, i); if ( col < min ) min = col; if ( col > max ) max = col; } } if( max == 0 )return; for ( i = 0; i < data.height; i++ ) { for ( j = 0; j < data.width; j++ ) { col = ( data.getPixel(j, i) & 0xff ) - min; col = col * range / max; data.setPixel( j, i, col ); } } } } }
Join Effecthub.com
Working with Global Gaming Artists and Developers!
Login
Sign Up
Or Login with Your Email Address:
Email
Password
Remember
Or Sign Up with Your Email Address:
Your Email
This field must contain a valid email
Set Password
Password should be at least 1 character
Stay informed via email