package { import flash.display.*; import flash.events.*; import flash.net.*; import caurina.transitions.Tweener; public class LoadingPanel extends Sprite{ public var loader:Loader; public var p:uint = 0; public var total:uint; public var current:uint = 0; public var panelAry:Array = []; public var side:Number = 50; public var col:uint; public function LoadingPanel(){ loader = new Loader(); loader.contentLoaderInfo.addEventListener( ProgressEvent.PROGRESS, onProgress); loader.contentLoaderInfo.addEventListener( Event.COMPLETE, onComplete); loader.contentLoaderInfo.addEventListener( Event.OPEN, onOpen); loader.load( new URLRequest( "http://farm2.static.flickr.com/1250/567791491_5855bf986d_b.jpg" ) ); } private function onOpen( e:Event ):void{ col = Math.ceil( stage.stageWidth/side ); total = col*Math.ceil(stage.stageHeight/side); this.addEventListener( Event.ENTER_FRAME, onEnterFrame); } private function onProgress( e:ProgressEvent ):void{ current = Math.round(e.bytesLoaded/e.bytesTotal*total); } private function onComplete( e:Event ):void{ loader.contentLoaderInfo.removeEventListener( ProgressEvent.PROGRESS, onProgress); loader.contentLoaderInfo.removeEventListener( Event.COMPLETE, onComplete); loader.contentLoaderInfo.removeEventListener( Event.OPEN, onOpen); } private function onEnterFrame( e:Event ):void{ if( p < current ){ var panel:Sprite = new Sprite(); panel.alpha = 0; panel.x = Math.random()*stage.stageWidth; panel.y = Math.random()*stage.stageHeight; panel.scaleX = panel.scaleY = 0; panel.name = String(p); panel.graphics.beginFill( 0x000000, 1); panel.graphics.drawRect( 0, 0, side, side); panel.graphics.endFill(); panelAry.push( panel ); addChild( panel ); Tweener.addTween( panel, {alpha:1, x:p%col*side, y:Math.floor(p/col)*side, scaleX:1, scaleY:1, time:0.8, transition:"easeOutExpo", onComplete:function():void{ if(Number(this.name) >= total-1){ end();} } } ); p ++; } } private function end():void{ this.removeEventListener( Event.ENTER_FRAME, onEnterFrame); for(var i:uint=0; i<panelAry.length; i++){ Tweener.addTween( panelAry[i], {alpha:0, time:0.4, delay:Math.random()*0.5, onComplete:function():void{ removeChild(this); } } ); } var r:Number = stage.stageWidth/loader.width >= stage.stageHeight/loader.height ? stage.stageWidth/loader.width : stage.stageHeight/loader.height; loader.scaleX = loader.scaleY = r; addChildAt( loader, 0); } } } タイル状にローディング