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を利用すると便利かと思います。
|