MovieClipLoaderで読み込む

MovieClipLoaderクラスを用いて、外部ファイルの読み込みを行い、
プログレスバーを表示してみよう! :boy:

ということで、作ってみた。 😮
#sample4.swf は、ちょっと重いです。(1.3MBくらい)

This movie requires Flash Player 9.0.0


_root に、プログレスバーとして、
ムービークリップ(インスタンス名: progressBar)を配置。
そのムービークリップアクションに
onClipEvent (load) {
  this._visible = false;
  _global.progressBarPosY = this._y;
}
と記述。
#progressBar内には、
#ムービークリップ(インスタンス名: bar)を配置。
#テキストフィールド(インスタンス名: per,total)を配置。

_root に、読み込み用ムービークリップ(インスタンス名: load_mc)を配置。

_root 1フレーム目 フレームアクションに
var mcLoader:MovieClipLoader = new MovieClipLoader();
var objListener:Object = new Object();
objListener.onLoadStart = function(target_mc:MovieClip):Void {
  // ロード開始時の処理
  progressBar._visible = true;
  progressBar._y = progressBarPosY;
  progressBar._alpha = 100;
  progressBar.per.text = "0%";
  progressBar.total.text = "0KB";
  progressBar.bar._xscale = 0;
  target_mc._visible = false;
};
objListener.onLoadError = function(target_mc:MovieClip, error_str:String):Void {
  // ロードできなかったときの処理
  progressBar._visible = true;
  progressBar.per.text = "0%";
  progressBar.total.text = "Not Found";
  progressBar.bar._xscale = 0;
};
objListener.onLoadProgress = function(target_mc:MovieClip, nLoadedBytes:Number, nTotalBytes:Number):Void {
  // ロード中の処理
  var percent:Number = Math.floor(nLoadedBytes/nTotalBytes*100);
  progressBar.per.text = percent +"%";
  progressBar.total.text = Math.ceil(nTotalBytes/1024) + "KB";
  progressBar.bar._xscale = percent;

};
objListener.onLoadInit = function(target_mc:MovieClip):Void {
  // ロードしたSWFの第1フレームアクション実行後の処理
  // 一定時間後にprogressBarのフェードアウト開始
  var fadeOutID:Number = setInterval(progressBarFadeOut, 1000);
  // progressBarのフェードアウト関数
  function progressBarFadeOut():Void {
    clearInterval(fadeOutID);
    delete fadeOutID;
    progressBar.onEnterFrame = function():Void {
      this._y += 1;
      this._alpha -= 5;
      if (this._alpha < 0) {
        this._visible = false;
        this._y = progressBarPosY;
        this._alpha = 100;
        target_mc._visible = true;
        delete this.onEnterFrame;
      }
    };
  }

};
mcLoader.addListener(objListener);
と記述。

_root に配置した各ボタンに
on(release) {
  mcLoader.loadClip("外部ファイルのURL", load_mc);
}
と記述。

参考資料「MovieClipLoaderクラスについて


外部ファイルが存在していない場合も処理できて便利なので、
MovieClipLoaderクラス を使いませう。 :heart:

:caution: 注意点
通常は、MovieClipLoaderクラス のように、
読み込まれた外部ファイルは、ブラウザにキャッシュされるが、
それだと読み込みの実験にならないので、ここでは、
var date:Date = new Date();
var time:Number = date.getTime();

mcLoader.loadClip("外部ファイルのURL?time="+time, load_mc);
のようにして、毎回読み込みが実行できるようにしている。


[修正] (06/02/07 Thu 05:02)
progressBar の長さを _width でなく _xscale で指定。
外部ファイルを読み込みして、progressBar が消えるまで、ボタン操作できないように細工。
MovieClip.loadMovie は、別記事に。
_global 変数の部分を修正。