JAVAC.JP
HOSHI TETSUYA 星鉄矢
2005/07/25
hossy@javac.jp
http://www.javac.jp
Google
WWW を検索 WWW.JAVAC.JP を検索

2-2 新機能MovieClipLoader

FlashPLayer7からMovieClipLoaderというクラスが使用可能になっています。
このクラスを用いることで、SWFファイル・JPGファイルのロードに際して、自分でロードの監視を行う必要がなくなり、且つ、様々な機能を提供してくれます。
ListenerObjectを生成し、そこにonLoadCompleteメソッド・onLoadProgressメソッドなどを付加しておき、このオブジェクトをaddListenerすることで、このクラスの恩恵に預かることができます。
具体的なソースとしては、
var mcLoader:MovieClipLoader=new MovieClipLoader();
var lo:Object=new Object();
lo.onLoadComplete=function(){
    trace("Load Complete.");
}
lo.onLoadError=function(){
    trace("Load Error.");
}
lo.onLoadInit=function(){
    trace("loaded and Initialize.");
}
lo.onLoadProgress=function(target_mc,loadedBytes,totalBytes){
    trace("Now Loading."+":"+loadedBytes+"/"+totalBytes);
}
lo.onLoadStart=function(){
    trace("Load Start.");
}
mcLoader.addListener(lo);
this.createEmptyMovieClip("seed",1);
mcLoader.loadClip("test.jpg",this.seed);
stop();
ローカルでパブッリッシュプレビューを行っている場合、test.jpgがローカルのため、ローディングの様子が分からないかと思いますので、
var mcLoader:MovieClipLoader=new MovieClipLoader();
var lo:Object=new Object();
lo.onLoadComplete=function(){
    trace("Load Complete.");
}
lo.onLoadError=function(){
    trace("Load Error.");
}
lo.onLoadInit=function(){
    trace("loaded and Initialize.");
}
lo.onLoadProgress=function(target_mc,loadedBytes,totalBytes){
    trace("Now Loading."+":"+loadedBytes+"/"+totalBytes);
}
lo.onLoadStart=function(){
    trace("Load Start.");
}
mcLoader.addListener(lo);
this.createEmptyMovieClip("seed",1);
mcLoader.loadClip("http://www.javac.jp/download/test.jpg",this.seed);
stop();
と書き直してみると、
Load Start.
Now Loading.:789/106555
Now Loading.:2685/106555
Now Loading.:5605/106555
Now Loading.:9365/106555
Now Loading.:9985/106555
Now Loading.:17285/106555
Now Loading.:25477/106555
Now Loading.:26045/106555
Now Loading.:34237/106555
Now Loading.:34805/106555
Now Loading.:39185/106555
Now Loading.:40645/106555
Now Loading.:48837/106555
Now Loading.:49405/106555
Now Loading.:57597/106555
Now Loading.:58165/106555
Now Loading.:59625/106555
Now Loading.:63385/106555
Now Loading.:64005/106555
Now Loading.:71305/106555
Now Loading.:77145/106555
Now Loading.:85337/106555
Now Loading.:85905/106555
Now Loading.:90285/106555
Now Loading.:93205/106555
Now Loading.:97585/106555
Now Loading.:99045/106555
Now Loading.:106555/106555
Load Complete.
loaded and Initialize.
などと経過が見えるかと思います。

ローディング完了後の処理(JPGファイルのセンタライズなど)は、onLoadInitメソッドにて行うと、正確に行うことができます。

ここでは、匿名メソッドを作成して行っていますが、ListenerObjectをListnerクラスの形にしてonLoadCompleteメソッド等をクラスメソッドにする方法もあります。
ListenerClass
---
class ListenerClass{
    function ListnerClass(){
    }

    function onLoadComplete():Void{
        trace("Load Complete.");
    }

    function onLoadError():Void{
        trace("Load Error.");
    }

    function onLoadInit():Void{
        trace("loaded and Initialize.");
    }

    function onLoadProgress(target_mc:MovieClip
                ,loadedBytes:Number,totalBytes:Number):Void{
        trace("Now Loading."+":"+loadedBytes+"/"+totalBytes);
    }

    function onLoadStart():Void{
        trace("Load Start.");
    }
}
---
main.as
---
var mcLoader:MovieClipLoader=new MovieClipLoader();
var lo:ListenerClass=new ListenerClass();
mcLoader.addListener(lo);
this.createEmptyMovieClip("seed",1);
mcLoader.loadClip("test.jpg",this.seed);
stop();
更に、EventDispatcherを利用することもできます。
EventDispatcherに関してはここでは詳細に説明しませんが、ボタンイベントなどの際に非常に重宝するものです。
ここでは、MovieClipLoaderにおいてもEventDispatcherを利用できることを紹介することのみに留めます。
TestClass
---
import mx.events.EventDispatcher;

class TestClass{
    var path:MovieClip;

    function TestClass(path:MovieClip){
        this.path=path;
        var mcLoader:MovieClipLoader=new MovieClipLoader();
        path.listenerObject=new Object();
        var lo:Object=path.listenerObject;
        EventDispatcher.initialize(lo);
        lo.onLoadComplete=function(){
            var lo:Object=new Object();
            lo.target=this;
            lo.type="printOut";
            lo.str="Load Complete.";
            this.dispatchEvent(lo);
        }
        lo.onLoadError=function(){
            var lo:Object=new Object();
            lo.target=this;
            lo.type="printOut";
            lo.str="Load Error.";
            this.dispatchEvent(lo);
        }
        lo.onLoadInit=function(){
            var lo:Object=new Object();
            lo.target=this;
            lo.type="printOut";
            lo.str="loaded and Initialize.";
            this.dispatchEvent(lo);
        }
        lo.onLoadProgress=function(target_mc:MovieClip
                    ,loadedBytes:Number,totalBytes:Number){
            var lo:Object=new Object();
            lo.target=this;
            lo.type="printOut";
            lo.str="Now Loading."
                        +":"+String(loadedBytes)+"/"+String(totalBytes);
            this.dispatchEvent(lo);
        }
        lo.onLoadStart=function(){
            var lo:Object=new Object();
            lo.target=this;
            lo.type="printOut";
            lo.str="Load Start.";
            this.dispatchEvent(lo);
        }
        lo.addEventListener("printOut",this);
        mcLoader.addListener(lo);
        path.createEmptyMovieClip("seed",1);
        mcLoader.loadClip("test.jpg",path.seed);
    }

    function printOut(eventObj):Void{
        var str:String=String(eventObj.str);
        trace(str);
    }
}
---
main.as
---
var test:TestClass=new TestClass(this);
stop();
FlashPlayer7以降の環境では、MovieClipLoaderを利用すると便利かと思います。



BACKTOPNEXT




All Contents Copyright (C) 2005 HOSHI Tetsuya
Home