ダウンロードしたswfファイルの中に、さらに画像などを読み込む方法といえば、loadMovieがまず思いつきます。このメソッドはURLを指定してやるだけでよくて、記述が簡単なんですが、難がひとつあります。それは、ロードが完了したタイミングをつかまえられない、ということ。つまり、読み込みが完了した直後にその画像を非表示にする、などということができません。
そういったニーズを満たしてくれるのが、MovieClipLoader。このクラスのオブジェクトに、リスナーオブジェクトを追加してやることで、画像読み込みに関連するいろいろなイベント、例えばエラー処理や読み込み完了など、を処理することができます。今日はもっとも基本的なパターンとして、「画像読み込みが完了するまではloading表示、完了したらloadingを消して、画像を表示」という挙動のクラスを設計してみます。
ざっくりとした仕様としては、StartLoadメソッドで画像の読み込みを開始して、ロード完了と同時に画像を非表示化。表示・非表示はShowメソッド、Hideメソッドで行う、という感じです。読み込みが完了する前のタイミングでShowが呼ばれたとしても、読み込み完了と同時に表示されるように時間差をクッションしてやる、というのがコツです。以下ソースコードです。
class MyPictureUnit{
var mc:MovieClip;
var oLoader:MovieClipLoader;
var oListener:Object;
var fVisible,fLoaded:Boolean;
function MyPictureUnit(){
this.mc = _root.createEmptyMovieClip("mcSample",_root.getNextHighestDepth());
this.mc.createEmptyMovieClip("mcPicture",_root.getNextHighestDepth());
this.mc.createTextField("tfLoading",_root.getNextHighestDepth(),0,0,0,0);
this.mc.tfLoading.autoSize = true;
this.mc.tfLoading.text = "loading...";
this.oListener = new Object();
var owner:Object = this;
this.oListener.onLoadComplete = function(){owner.OnLoadComplete();}
this.oLoader = new MovieClipLoader();
this.oLoader.addListener(this.oListener);
this.fLoaded = this.fVisible = false;
this.StartLoad();
}
function StartLoad(strFilename:String){
this.oLoader.loadClip(strFilename,this.mc.mcPicture);
}
function OnLoadComplete(){
this.fLoaded = true;
this.mc.tfLoading._visible = false;
this.mc.mcPicture._visible = this.fVisible;
}
function Show(){
this.fVisible = true;
this.mc.mcPicture._visible = this.fLoaded;
}
function Hide(){
this.fVisible = false;
this.mc.mcPicture._visible = false;
}
}