ActionScript 3.0入門ノート CS4でタグ「contentLoaderInfo」が付けられているもの

Section14-01 外部イメージファイルを読み込んでフェードインで表示するスクリプト(p.406)のサンプルはLoaderクラスを継承した作りになっているために難しいかもしれません。そこでフレームアクションで実行できるシンプルな例を紹介しておきます。
このスクリプトのポイントは、画像ファイルの読み込み完了イベントEvent.COMPLETEのリスナーをLoaderのインスタンスのcontentLoaderInfoプロパティにaddEventListener()する部分です。(6行目)

[:script:]読み込み完了後にフェードインで表示する
//読み込む画像ファイルを指定する
var url:String = "image/IMG_8171.jpg";
var urlReq:URLRequest = new URLRequest(url);
//ローダーを作る
var photoLoader:Loader=new Loader();
photoLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoaded);
//画像を読み込む
photoLoader.load(urlReq);
//画像を表示する
photoLoader.x = 100;
photoLoader.y = 50;
addChild(photoLoader);
//ドロップシャドウを付ける
var dsf:DropShadowFilter=new DropShadowFilter();
dsf.alpha = 0.8;
photoLoader.filters = [dsf];

import fl.transitions.Tween;
import fl.transitions.easing.*;
var tw:Tween;
//フェードインで表示する
function onLoaded(eventObj:Event):void {
	tw = new Tween(photoLoader,"alpha",Regular.easeInOut,0,1,1,true);
}

fadein.jpg
swfを試す

ファイル一式をダウンロードする
最初にswfを表示する際の読み込み待ちについて簡単に紹介しましょう。AS2まではframesLoadedプロパティを使って、特定のフレーム、特定のインスタンスが読み込まれたどうか判断して読み込み待ちを行いました。

[:script:]最後まで読み込まれたらtopへ進む。それまではループする。
if (this.framesLoaded == this.totalFrames) {
    gotoAndPlay("top");
}else{
   gotoAndPlay("loop");
}

framesLoadedプロパティを使った方法はAS3でも使えますが、AS3からは次に示すようにloaderInfoのprogressイベントのリスナーになり、bytesLoadedとbytesTotalのプロパティを使うことでダウンロード量を調べることができます。

[:script:]プログレスバーを表示するフレームアクション
stop();
var bar:Sprite = new Sprite();
bar.graphics.beginFill(0x000000);
bar.graphics.drawRect(0,0,1,5);
bar.graphics.endFill();
bar.y=stage.stageHeight/2;
addChild(bar);
loaderInfo.addEventListener(ProgressEvent.PROGRESS, progressHandler);
loaderInfo.addEventListener(Event.COMPLETE, completeHandler);

function progressHandler(eventObj:ProgressEvent):void {
	var per:Number = loaderInfo.bytesLoaded/loaderInfo.bytesTotal;
	bar.width = stage.stageWidth*per;
}
function completeHandler(eventObj:Event):void{
		removeChild(bar);
		loaderInfo.removeEventListener(ProgressEvent.PROGRESS, progressHandler);
		loaderInfo.removeEventListener(Event.COMPLETE, completeHandler);
		gotoAndStop("top");
}
swfを試す
1回実行するとブラウザにキャッシュされるので、2回目以降はプログレスバーが表示されない場合があります。

これを見て外部jpegやswfを読み込むLoaderでの処理と同じと思った人も多いはず。そうです。LoaderのcontentLoaderInfoですね。contentLoaderInfoは読み込むコンテンツオブジェクトのloaderInfoの値なんですね。

まったく新しいAS3の世界!
694a.jpg
Adobe Flash CS4
詳細!ActionScript3.0入門ノート[完全改訂版](CD-ROM付)

楽しいActionScript。
新たなる1歩へと踏み出しましょう。
■内容は?→ 目次を見る
■評判は?→ 書評を読む
この本を書いたわけ

タグ

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

あわせて読みたいブログパーツ