トップ > Flash Lite 2.0 / 3.0 > FL3 | loadMovie の検証サンプル

FL3 | loadMovie の検証サンプル

ぶっちゃけ Flash Lite で外部ファイル読み込みという構成自体にあまり意味がない(汗

理由は単純。NTT docomo の場合、外部読み込みの容量の累計が 100KB を超えると「最大サイズを超えました」というエラーが表示されてしまうため。他キャリアでは累計に関係なく読み込める場合もあるのだが…。

まぁ、それでも、例えば、ランダムで画像を読み込んでコンテンツがそこで終了してしまうような構成だと、外部読み込みを行うことでバリエーションを増やすことができるといえばできる。あまり活用事例が少なそうな印象だけども(;´д`)ノ

いつか役立つ日も来るかもしれないと、とりあえずサンプルを作ってみた。

ちなみに、docomo の SH905i で検証してみたところ、やはり累計 100KB を超えるとファイルが読み込めない。アンロード処理を行ってもムリ。ちなみに同じファイルは何度もで読み込み可能。

また、ローディング中の容量はやはり取得できないみたいでローディング状況を表示することもできないのかな…。あとは、JPG / SWF ファイルは問題なかったのだけども、GIF / PNG / BMP 画像は読み込み不可。画像形式に関しては携帯の機種などにも依存されるみたい(?)。

サンプルのソースはこんな感じ。


//変数
var itemArr:Array = [""];
itemArr.push("01.jpg");
itemArr.push("01.jpg");
itemArr.push("02.jpg");
itemArr.push("03.jpg");
itemArr.push("04.gif");
itemArr.push("05.swf");
itemArr.push("06.png");
itemArr.push("07.bmp");
//初期処理
initStage();
initBtn();
initKeyEvent();
bytes.text = _root.getBytesTotal();
//ステージ設定
function initStage():Void {
	//ステージサイズ
	Stage.scaleMode = "showAll";
	Stage.align = "";
	//画質設定
	_quality = "BEST";
}
//ボタン処理
function initBtn() {
	var btn:MovieClip;
	for (var i = 1; i <= 9; i++) {
		btn = eval("b"+i);
		btn.no = i;
		btn.flag = false;
		btn.loader._visible = false;
		btn.per._visible = false;
		//btn._focusrect = false;
		btn.onRelease = function() {
			if (this.flag) {
				unloadObj(this);
			} else {
				loadObj(this.no, this);
			}
		}
	}
}
//キーイベント
function initKeyEvent() {
	var keyListener:Object = new Object();
	keyListener.onKeyDown = function () {
		var key = chr(Key.getAscii());
		var btn = eval("b" + key);
		if (btn.flag) {
			unloadObj(btn);
		} else {
			loadObj(key, btn);
		}
	}
	Key.addListener(keyListener); 
}
//ロード処理
function loadObj(n:Number, btn:MovieClip) {
	var loadListener:Object = new Object();
	loadListener.onLoadStart = function(target:MovieClip) {
	    btn.loader._visible = true;
		btn.per._visible = true;
		btn.per.text = "0";
	}
	loadListener.onLoadProgress = function(target:MovieClip, bytesLoaded:Number, bytesTotal:Number):Void {
	    btn.per.text = Math.round(bytesLoaded / bytesTotal * 100);
	}
	loadListener.onLoadInit = function(target:MovieClip) {
	    btn.loader._visible = false;
		btn.per._visible = false;
		btn.flag = true;
		sizeAdjust(btn.base, btn.mask);
		bytes.text = _root.getBytesTotal();
		delete loadListener;
		delete mcl;
	}
	var mcl:MovieClipLoader = new MovieClipLoader();
	mcl.addListener(loadListener);
	mcl.loadClip(itemArr[n], btn.base);
}
function sizeAdjust(img:MovieClip, mask:MovieClip) {
	var gW:Number = mask._width;
	var gH:Number = mask._height;
	img._width = gW;//横に合わせる
	img._yscale = img._xscale;
	if (img._height > gH) {
		img._height = gH;//縦に合わせる
		img._xscale = img._yscale
	}
	img._x = mask._x + (gW - img._width) / 2;
	img._y = mask._y + (gH - img._height) / 2;
}
//アンロード処理
function unloadObj(btn:MovieClip) {
	btn.base.unloadMovie();
	btn.flag = false;
}

この記事をブックマークしておく

コメント:2

reo 2009-10-07 (水) 19:37

とても役立つサンプルありがとうございます。

端末によって、読み込める画像の種類に違いがでるんですね。
改めて実機で、確認することができて助かりました。

ヒカルツカサ 2009-10-07 (水) 20:06

■reoさん
そうなんですよね、画像の種類、意外な落とし穴でした!自分のメモ代わりにとサンプルを作成しておいたのですが、reoさんのお役にも立てられて何よりです!
コメントありがとうございました!

コメント投稿

コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。

この情報を記憶する

トップ > Flash Lite 2.0 / 3.0 > FL3 | loadMovie の検証サンプル

記事検索
カテゴリ
RSSフィード

このページの先頭へ戻る