ひっと

FlashにNow Loadingを実装する ActionScript(AS3)

~ Flashアプリ、ゲームのためのAS3サンプルプログラム集 ~

FlashにNow Loadingを実装する factoryClass

NowLoadingを行うサンプルです。(ロードが速すぎてわからないかも)

FlashにNow Loadingを実装する サンプルソースコード

使うファイルは2本あります(Main.as, Preloader.as)
factoryClassを記述をすることで、Now Loadingを担当するPreloaderクラスが先に実行され、ロードが済むとMainクラスの処理が始まります。

"Main.as"
package 
{
    import flash.display.Sprite;
    import flash.display.Stage;
    import flash.events.Event;
    import flash.text.TextField;
    
    [SWF(width="400", height="300")]
    [Frame(factoryClass="Preloader")]    //先にPreloaderクラスを実行する
    public class Main extends Sprite 
    {
        public function Main( ):void 
        {
            if ( stage ) {
                init();
            } else {
                addEventListener(Event.ADDED_TO_STAGE, init);
            }
        }

        private function init(e:Event = null):void 
        {
            var t:TextField = new TextField();
            t.width = 400;
            t.text = "ロード終了!! メインの処理に入りました。";
            this.addChild(t);
        }
        
    }
    
}

"Preloader.as"
package
{
    import flash.display.MovieClip;
    import flash.display.Sprite;
    import flash.display.DisplayObject;
    import flash.events.Event;
    import flash.events.IOErrorEvent;
    import flash.events.ProgressEvent;
    import flash.text.TextField;
    import flash.utils.getDefinitionByName;
        
    public class Preloader extends MovieClip
    {
        //Now loading...メッセージ
        private var loading_msg:TextField = new TextField();

        public function Preloader() 
        {
            //プログレス更新イベント
            loaderInfo.addEventListener( ProgressEvent.PROGRESS, onProgress );
            //エラーイベント
            loaderInfo.addEventListener( IOErrorEvent.IO_ERROR, ioError );

            //ロードが終了したか毎フレームチェックする
            addEventListener( Event.ENTER_FRAME, onEnterFrame );

            //メッセージ登録
            this.addChild( loading_msg );
        }

        private function onProgress( e:ProgressEvent ):void
        {
            //ロードしたデータサイズを比較してパーセント表示にします
            var per:Number = ( e.bytesLoaded / e.bytesTotal ) * 100;

            loading_msg.text = "Now loading..." + per.toString() +"%";
        }
        
        private function ioError(e:IOErrorEvent):void 
        {
            trace(e.text);
        }

        //ロードが終了したか毎フレームチェックする
        private function onEnterFrame(e:Event):void
        {
            if ( this.currentFrame == this.totalFrames ) {//ロードが終了した

                //ロードに使ったイベント削除
                loaderInfo.removeEventListener( ProgressEvent.PROGRESS, onProgress );
                loaderInfo.removeEventListener( IOErrorEvent.IO_ERROR, ioError );
                removeEventListener( Event.ENTER_FRAME, onEnterFrame );

                //メッセージ削除
                this.removeChild( loading_msg );
                
                //Mainクラスを呼び出す
                var mainClass:Class = getDefinitionByName( "Main" ) as Class;
                addChild( new mainClass( ) as DisplayObject );

            }

        }

}

}
目次へ
57801