// forked from minon's さらにゆらゆら~ // forked from minon's ゆらゆら~ // forked from minon's なんだかちょっと旗っぽい // forked from minon's なみなみ /** * 陰影つけてみた * いっかしょ計算があわへんところがある、あと、ラインを消すと微妙な隙間が出来る * @author minon */ package { import flash.display.*; import flash.events.Event; import flash.geom.*; import flash.net.URLRequest; import flash.system.LoaderContext; import flash.text.TextField; import flash.utils.getTimer; [SWF (width="465",height="465",frameRate="60",backgroundColor="#000000")] public class FlashTest extends Sprite { public var _outline:Sprite; public var _canvas:Bitmap; public var _n:int = 20; public var _l:int = 320; public var _t:Number = 0; public var _pArray:Array = []; public var _bitmapdata:BitmapData; public function FlashTest() { var loader:Loader = new Loader(); loader.contentLoaderInfo.addEventListener( Event.COMPLETE, this.init ); loader.load( new URLRequest("http://labs.minomix.net/img/minon.jpg"), new LoaderContext(true) ); } public function init(e:Event):void { var loader:Loader = LoaderInfo( e.target ).loader; _bitmapdata = Bitmap( loader.content ).bitmapData; this.addChild( _canvas = new Bitmap( new BitmapData( 465, 465, true, 0x00FF0000 ) ) ); this.addChild( _outline = new Sprite() ); var u:Number = _bitmapdata.width / _n; for ( var i:int = 0 ; i < _n ; i++ ) { var bmp:BitmapData = new BitmapData(u, _bitmapdata.height); bmp.copyPixels( _bitmapdata, new Rectangle( u * i, 0, u, _bitmapdata.height ), new Point() ); _pArray.push( new pt( _l / _n * i + 50, 50, bmp ) ); } this.addEventListener( Event.ENTER_FRAME, update ); this.addEventListener( Event.ENTER_FRAME, render ); } private function update(e:Event):void { _t += 0.1 var p:pt; for ( var i:int = 0 ; i < _pArray.length ; i++ ) { p = _pArray[i]; p.y = p.yy + Math.sin( i*0.5 - _t ) * ( 8 * ( i / _pArray.length ) * 3 ); p.x = p.xx + Math.sin( i*0.5 - _t ) * ( 8 * ( i / _pArray.length ) ); } } public function render(e:Event):void { _outline.graphics.clear(); _outline.graphics.lineStyle( 2, 0xFF0000 ); var h:int = 320; var p:pt; var p2:pt; _canvas.bitmapData = new BitmapData( 465, 465, true, 0x00FF0000 ); for ( var i:int = 0 ; i < _pArray.length-1 ; i++ ) { p = _pArray[i]; p2 = _pArray[i + 1]; var mtx:Matrix = new Matrix( ( p2.x - p.x ) / p.bmp.width, ( p2.y - p.y ) * ( p.bmp.height / h ), 0, h / p.bmp.height, p.x, p.y); var a:Number = p.y - p.yy; var ct:ColorTransform = new ColorTransform(); ct.redOffset = ct.greenOffset = ct.blueOffset = -a*5; _canvas.bitmapData.draw( p.bmp, mtx, ct, null, null, true ); _outline.graphics.moveTo( p.x, p.y ); _outline.graphics.lineTo( p2.x, p2.y ); _outline.graphics.lineTo( p2.x, p2.y+h ); _outline.graphics.lineTo( p.x, p.y+h ); _outline.graphics.lineTo( p.x, p.y ); } } } } import flash.display.*; class pt { public var x:Number; public var y:Number; public var xx:Number; public var yy:Number; public var bmp:BitmapData; public function pt( _x:Number = 0, _y:Number = 0, _bmp:BitmapData = null ) { this.xx = this.x = _x; this.yy = this.y = _y; bmp = _bmp; } } 光と影のゆらゆら~