HAKUHIN's home page
更新履歴
 
 

 

ロード状況を取得する
 
サンプルをダウンロード
 


■ LoaderInfo クラスについて

自身のインスタンスの読み込み状況を調べるには、LoaderInfo クラスを使用します。
 
このクラスは、DisplayObject から派生しているクラスであれば、 loaderInfo プロパティに LoaderInfo オブジェクトが格納されているのでここからアクセスする事ができます。
 
stage のローダーインフォを取得する

var info : LoaderInfo = stage.loaderInfo;
 
■ 読み込み状況を調べる

現在の読み込みバイト数を調べるには、bytesLoaded プロパティを使用します。
読み込まれる総バイト数を調べるには、bytesTotal プロパティを調べます。
 
この2つのプロパティの数値が一致したときにすべての読み込みが完了したことがわかります。
 
自身の swf ファイルの読み込み状況を調べる

var info : LoaderInfo = stage.loaderInfo;

stage.addEventListener(Event.ENTER_FRAME,EnterFrameFunc);
function EnterFrameFunc(event){
	trace("読込数 : " + info.bytesLoaded);
	trace("総数 : " + info.bytesTotal);
	trace("パーセント : " + Math.floor(info.bytesLoaded / info.bytesTotal * 100));

	if(info.bytesLoaded == info.bytesTotal){
		trace("ロード完了");
		stage.removeEventListener(Event.ENTER_FRAME,EnterFrameFunc);
	}
}
 
■ イベントを使って読み込み状況を調べる

ProgressEvent.PROGRESS、
Event.COMPLETE
 
イベントを使ってローディング状況を知る事もできます。
 
イベントを使って自身の swf ファイルの読み込み状況を調べる

// ローダーインフォを取得
var info : LoaderInfo = stage.loaderInfo;

// 読み込み中に常に呼び出される
info.addEventListener (ProgressEvent.PROGRESS,LoaderInfoProgressFunc);
function LoaderInfoProgressFunc (event : ProgressEvent):void {
	trace ("読込:" + event.bytesLoaded);
	trace ("全体:" + event.bytesTotal);
	trace ("パーセント:" + Math.floor(event.bytesLoaded / event.bytesTotal * 100));
}

// 読み込み完了時に呼び出される
info.addEventListener (Event.COMPLETE,LoaderInfoCompleteFunc);
function LoaderInfoCompleteFunc (event : Event):void {
	trace ("読み込みを完了");
}
 
■自身のswfファイルが格納されているURLを取得する

自身のファイルの置き場所となるURLを取得するには、url プロパティを使用します。
 
自身の swf ファイルが格納されているURLを取得する

var info : LoaderInfo = stage.loaderInfo;

trace("ファイルパス : " + info.url);
 
■自身のバイナリを取得する

自身のファイルのバイナリを取得するには、bytes プロパティを使用します。
 
自身のswfファイルのバイナリを取得する

var info : LoaderInfo = stage.loaderInfo;
var bytes : ByteArray = info.bytes;
 
 



画像やSWFファイルを読み込む
 

サンプルをダウンロード
 


■Loader クラスについて

Loader クラスを使うと、「画像」や 「 swf ファイル」を読み込んで Flash 画面上に表示することができます。
 
読み込めるフォーマットは、GIF、JPEG、PNG 形式です。GIFアニメ形式は1フレーム目のみ表示できます。
 
SWF ファイルは、どのバージョンでも読み込めます。
 
ActionScript3.0 で書き出された swf ファイル」の場合は、プロパティやメソッドに相互アクセスできます。
 
ActionScript1.02.0 で書き出された swf ファイル」の場合は、プロパティやメソッドに相互アクセスする事ができません。
 
Loader は以下のクラスから派生しています。ここで解説してない分はリンク先に解説がありますので合わせてご覧下さい。
 
Object
↓派生
EventDispatcher
↓派生
DisplayObject
↓派生
InteractiveObject
↓派生
DisplayObjectContainer
↓派生
Loader
 
■サンドボックスについて

swf ファイルから別ドメインにある画像や swf ファイルを読み込む場合、サンドボックスによる制限があります。
 
読み込んで表示するだけなら特に設定は不要ですが、ビットマップへのキャプチャーなど、内部のデータにアクセスしようとするとエラーとなります。
 
画像ファイルのサンドボックスによる制限を解除するには、クロスドメインポリシーファイルを設置する必要があります。

swf ファイルを読み込んで相互アクセスしたい場合は、クロスドメインスクリプトの設定を行う必要があります。
 



■ローダークラスをインスタンス化する

まずローダークラスをインスタンス化します。
 
new Loader ();
第01引数 なし
戻り値 URLLoader オブジェクト
 
URLLoader オブジェクトを作成する

var loader_obj : Loader = new Loader();
 
■読み込みを開始する

load() メソッドを使うと読み込みを開始することが出来ます。
 
引数にファイルまでの相対パスかURLを URLRequest オブジェクトで指定します。
 
すでに読み込み中にもかかわらずこのメソッドを呼び出した場合は、以前の読み込み処理が終了し新しく読み込みを開始します。
 
Loader.load ( URLRequest型 , LoaderContext型 );
第01引数 ファイルまでの相対パスかURLをURLRequest型で指定します。
第02引数(略可)セキュリティに関する情報をLoaderContext型で指定します。
戻り値 なし
 
ファイルの読み込みを開始する

var loader_obj : Loader = new Loader();

var url : URLRequest = new URLRequest("http://hakuhin.jp/test.swf");
loader_obj.load(url);

swfファイルからの相対パスを使う事もできる

var loader_obj : Loader = new Loader();

var url : URLRequest = new URLRequest("../sound/test.png");
loader_obj.load(url);
 
■読み込みを停止する

読み込みを停止したい場合は、close() メソッドを呼び出します。
読み込みが最後まで完了した場合、このメソッドを呼び出すとエラーとなります。
 
読み込みを停止する

var loader_obj : Loader = new Loader();

var url : URLRequest = new URLRequest("test.swf");
loader_obj.load(url);

try{
	loader_obj.close();
}catch(e:Error){
	trace("停止失敗");
}
 
■読み込んだデータを破棄する

読み込んだデータを破棄したい場合は、unload() メソッドを呼び出します。
 
読み込んだデータを破棄する

var loader_obj : Loader = new Loader();

var url : URLRequest = new URLRequest("test.swf");
loader_obj.load(url);

loader_obj.unload();
 
■読み込んだデータを Flash 画面に表示する

読み込んだデータを Flash 画面上に表示するには、Loader オブジェクトを表示リストに登録します。表示リストについてはこちらで解説しています。
 
ファイルを読み込み stage の表示リストに登録して画面に表示する

var loader_obj : Loader = new Loader();
var url : URLRequest = new URLRequest("test.swf");
loader_obj.load(url);

stage.addChild(loader_obj);
 
■読み込んだファイルをバイナリデータとして取得する

読み込んだデータを バイナリデータとして取得するには bytes プロパティを使用します。 サンドボックスによる制限があっても取得することができます。
 
ファイルを読み込みバイナリとして取得

var loader_obj : Loader = new Loader();
var url : URLRequest = new URLRequest("test.swf");
loader_obj.load(url);

// ローダーインフォを取得
var info : LoaderInfo = loader_obj.contentLoaderInfo

info.addEventListener (Event.INIT,LoaderInfoInitFunc);
function LoaderInfoInitFunc (event : Event):void {
	var bytes : ByteArray = info.bytes;
}


 
■読み込み状況を調べる

「どれだけ読み込まれたか?」というローディング状況を知りたい場合は、
 
Event.OPEN、
ProgressEvent.PROGRESS、
Event.INIT、
Event.COMPLETE、
IOErrorEvent.IO_ERROR
 
イベントを使用します。LoaderInfo オブジェクトに登録します。
 
読み込み状況を知る

var loader_obj : Loader = new Loader();

// ローダーインフォを取得
var info : LoaderInfo = loader_obj.contentLoaderInfo;

info.addEventListener (Event.OPEN,LoaderInfoOpenFunc);
function LoaderInfoOpenFunc (event : Event):void {
	trace ("読み込みを開始した");
}

info.addEventListener (ProgressEvent.PROGRESS,LoaderInfoProgressFunc);
function LoaderInfoProgressFunc (event : ProgressEvent):void {
	trace ("読込:" + event.bytesLoaded);
	trace ("全体:" + event.bytesTotal);
	trace ("パーセント:" + Math.floor(event.bytesLoaded/event.bytesTotal*100));
}

info.addEventListener (Event.INIT,LoaderInfoInitFunc);
function LoaderInfoInitFunc (event : Event):void {
	trace ("読み込んだコンテンツの初期化が行われた");
}

info.addEventListener (Event.COMPLETE,LoaderInfoCompleteFunc);
function LoaderInfoCompleteFunc (event : Event):void {
	trace ("読み込み完了");
}

info.addEventListener (IOErrorEvent.IO_ERROR,LoaderInfoIOErrorFunc);
function LoaderInfoIOErrorFunc (event : IOErrorEvent):void {
	trace ("ファイル入出力のエラー");
}

// 読み込み開始
var url : URLRequest = new URLRequest("test.swf");
loader_obj.load(url);
 
■読み込んだファイルの情報を取得する

読み込んだファイルの情報を取得したい場合は、LoaderInfo オブジェクトのプロパティを使用します。
 
よく利用しそうなプロパティを列挙してみました。「全」という項目が○のプロパティは すべて読み込みが完了するまで正確なパラメータを取得することができません。
 
プロパティ名説明
contentTypeStringファイルの MIME タイプ
(SWFファイル) "application/x-shockwave-flash"
(JPEGファイル) "image/jpeg"
(GIFファイル) "image/gif"
(PNGファイル) "image/png"
(不明なバイナリ) null
urlString読み込まれるファイルの置き場所
×loaderURLString読み込み要求するSWFファイルの置き場所
widthintコンテンツの幅
heightintコンテンツの高さ
 
読み込んだファイルの情報を取得する

var loader_obj : Loader = new Loader();

// ローダーインフォを取得
var info : LoaderInfo = loader_obj.contentLoaderInfo;

// すべて読み込まれ初期化が完了したとき
info.addEventListener (Event.INIT,LoaderInitFunc);
function LoaderInitFunc (event) {
	trace("MIME タイプ : " + info.contentType);
	trace("ファイルの置き場所 : " + info.url);
	trace("要求側ファイルの置き場所 : " + info.loaderURL);
	trace("幅 : " + info.width);
	trace("高さ : " + info.height);
}

// 読み込み開始
var url : URLRequest = new URLRequest("test.png");
loader_obj.load (url);

 
■読み込んだSWFファイルの情報を得る

読み込んだファイルが swf ファイルであるか調べるには、contentType プロパティが "application/x-shockwave-flash" であるか調べます。
 
読み込んだSWFファイルの情報を得る

var loader_obj : Loader = new Loader();

// ローダーインフォを取得
var info : LoaderInfo = loader_obj.contentLoaderInfo;

// すべて読み込まれ初期化が完了したとき
info.addEventListener (Event.INIT,LoaderInitFunc);
function LoaderInitFunc (event) {
	// SWFファイルかチェック
	if(info.contentType == "application/x-shockwave-flash"){
		trace("SWFファイルである");
	}else{
		trace("SWFファイルではない");
	}
}

// 読み込み開始
var url : URLRequest = new URLRequest("test.swf");
loader_obj.load (url);
 
読み込んだファイルが、 swf ファイルである場合のみ取得できるプロパティの一覧です。
 
プロパティ名説明
swfVersionuintSWFファイルのバージョン SWFVersion.*
frameRateNumberフレームレート
actionScriptVersionuint使用されているアクションスクリプトのバージョン
 
読み込んだSWFファイルの情報を得る

var loader_obj : Loader = new Loader();

// ローダーインフォを取得
var info : LoaderInfo = loader_obj.contentLoaderInfo;

// すべて読み込まれ初期化が完了したとき
info.addEventListener (Event.INIT,LoaderInitFunc);
function LoaderInitFunc (event) {
	// SWFファイルかチェック
	if(info.contentType == "application/x-shockwave-flash"){
		trace("SWFファイルのバージョン : " + info.swfVersion);
		trace("フレームレート : " + info.frameRate);
		trace("アクションスクリプトのバージョン : " + info.actionScriptVersion);
	}
}

// 読み込み開始
var url : URLRequest = new URLRequest("test.swf");
loader_obj.load (url);
 



■親 SWF ファイルから読み込んだ子 SWF ファイルにアクセスする

ActionScript3.0 で書き出された swf ファイル同士であれば、プロパティやメソッドなど相互にアクセスが可能です。

「親 swf ファイル」から、Loader オブジェクトを使って 「子 swf ファイル」を読み込んだとします。
 
「親 swf ファイル」から「子 swf ファイル」にアクセスしたい場合、 Loader クラスの content プロパティを使用します。content プロパティには 「親 swf ファイル」の MainTimeline オブジェクトが格納されています。
 
子 swf ファイルにアクセスする(親 swf ファイルに記述)

var loader_obj : Loader = new Loader();

// ローダーインフォを取得
var info : LoaderInfo = loader_obj.contentLoaderInfo;

info.addEventListener (Event.COMPLETE,LoaderInfoCompleteFunc);
function LoaderInfoCompleteFunc (event : Event) {

	var child : DisplayObject = loader_obj.content;	// 子の MainTimeline
	trace(child);

}

// 読み込み開始
var url : URLRequest = new URLRequest("test.swf");
loader_obj.load(url);
 
■読み込んだ子 SWF ファイルから親 SWF ファイルにアクセスする

「親 swf ファイル」から、Loader オブジェクトを使って 「子 swf ファイル」を読み込んだとします。
 
「子 swf ファイル」から「親 swf ファイル」にアクセスしたい場合、 子の MainTimeline から parent プロパティを調べると、親の Loader オブジェクトにアクセスできます。
 
さらに親の表示リスト内を巡るには、Loader オブジェクトが表示リストに登録されている必要があります。
 
親 swf ファイルにアクセスする(子 swf ファイル内のルートタイムラインに記述)

var loader_parent : Loader = root.parent as Loader;	// 親の Loader
if(loader_parent){
	trace(loader_parent);
	trace(loader_parent.parent);
}
 
■swf ファイルのクロスドメインスクリプトについて

「親 swf ファイル」から、Loader オブジェクトを使って 別ドメインにある「子 swf ファイル」を読み込んだ場合、
 
読み込んだ swf ファイルを Flash 画面上に表示することは可能ですが、プロパティやメソッドに相互アクセスする事はできません。
 
このアクセス制限やサンドボックスによる制限を解除するには、Security.allowDomain() メソッドを使用します。
 
引数にドメインを指定すれば、自身がそのドメインから読み込まれた場合、プロパティやメソッドにアクセスされる事を許可します。
 
相互アクセスしたい場合は、どちらにも相手のドメインを許可する設定を追加します。
 
記述例です。
 
「 hakuhin.jp 」から読み込まれた場合、プロパティやメソッドにアクセスされる事を許可する

Security.allowDomain("hakuhin.jp");

すべてのドメインからプロパティやメソッドにアクセスされる事を許可する

Security.allowDomain("*");
 
別ドメイン間をスクリプトでアクセスする事をクロスドメインスクリプトといいます。
 



■ByteArray 型の配列に格納したデータから読み込む

loadBytes() メソッドを使用すると、ファイルからの読み込みではなく、メモリから読み込むことができます。
 
ByteArray 型のデータを読み込んで画像やSWFファイルを動的にインスタンス化して使用することができます。
 
Loader.loadBytes ( ByteArray型 , LoaderContext型 );
第01引数 バイナリデータをByteArray型の変数に格納して指定します。
第02引数(略可)セキュリティに関する情報をLoaderContext型で指定します。
戻り値 なし
 
バイナリデータからSWFファイルを読み込む

var stream:ByteArray = new ByteArray();
var data = [
	0x46,0x57,0x53,0x05,0x56,0x00,0x00,0x00,0x70,0x00,0x0F,0xA0,0x00,0x00,0xBB,0x80,
	0x00,0x1E,0x01,0x00,0x43,0x02,0xFF,0xFF,0xFF,0xBF,0x00,0x2B,0x00,0x00,0x00,0x01,
	0x00,0x70,0x7D,0x0D,0xAC,0x07,0xD0,0x9C,0x40,0x02,0x00,0x00,0x66,0xCC,0x00,0xFF,
	0x00,0x00,0x01,0x14,0x00,0x00,0x00,0x00,0x21,0x15,0xCD,0xAC,0x27,0x11,0x78,0x51,
	0x21,0xDB,0x06,0x0F,0x05,0xDC,0x3B,0x5F,0x40,0x00,0x86,0x06,0x06,0x01,0x00,0x01,
	0x00,0x00,0x40,0x00,0x00,0x00
];

var i;
var num = data.length;
for(i=0; i < num; i++) {
	stream.writeByte(data[i]);
}

var loader_obj : Loader = new Loader();
loader_obj.loadBytes(stream);
stage.addChild(loader_obj);

 
loadBytes() メソッドは非同期で実行される為、すぐにインスタンス化する事ができません

エラーがある場合は loadBytes() メソッドを呼び出した直後にイベントが発生する為、必ずイベントを先に設定してからこのメソッドを呼び出す必要があります。
 
また、同じタイミングでloadBytes() メソッドを何度も呼び出すと前の処理が中断する事があります。 確実に読み込みが終了した事をイベントで確認してからもう一度 loadBytes() イベントを呼び出すとよさそうです。
 
イベントを使用する

var stream:ByteArray = new ByteArray();
var data = [
	0x46,0x57,0x53,0x05,0x56,0x00,0x00,0x00,0x70,0x00,0x0F,0xA0,0x00,0x00,0xBB,0x80,
	0x00,0x1E,0x01,0x00,0x43,0x02,0xFF,0xFF,0xFF,0xBF,0x00,0x2B,0x00,0x00,0x00,0x01,
	0x00,0x70,0x7D,0x0D,0xAC,0x07,0xD0,0x9C,0x40,0x02,0x00,0x00,0x66,0xCC,0x00,0xFF,
	0x00,0x00,0x01,0x14,0x00,0x00,0x00,0x00,0x21,0x15,0xCD,0xAC,0x27,0x11,0x78,0x51,
	0x21,0xDB,0x06,0x0F,0x05,0xDC,0x3B,0x5F,0x40,0x00,0x86,0x06,0x06,0x01,0x00,0x01,
	0x00,0x00,0x40,0x00,0x00,0x00
];

var i;
var num = data.length;
for(i=0; i < num; i++) {
	stream.writeByte(data[i]);
}

var loader_obj : Loader = new Loader();

var info : LoaderInfo = loader_obj.contentLoaderInfo;
info.addEventListener (Event.COMPLETE,LoaderInfoCompleteFunc);
function LoaderInfoCompleteFunc (event : Event) {
	stage.addChild(loader_obj);
	trace ("メモリストリームから読み込みに成功");
}

info.addEventListener (IOErrorEvent.IO_ERROR,LoaderInfoIOErrorFunc);
function LoaderInfoIOErrorFunc (event : IOErrorEvent) {
	trace ("ファイル入出力のエラー");
}



loader_obj.loadBytes(stream);
 




サウンドファイルを読み込む
 


■サウンドファイルを読み込む

サウンドファイルの外部読み込みについてはこちらにまとめています。
 
外部からサウンドファイルを読み込み再生する

var url : URLRequest = new URLRequest("http://hakuhin.jp/test.mp3");
var loader_obj : Sound = new Sound(url);
SoundChannel = loader_obj.play();
 
 



テキストファイルを読み込む
 

サンプルをダウンロード
 
 
■URLLoader クラスをインスタンス化する

まず URLLoader クラスをインスタンス化します。
 
引数にURLRequest型でテキストファイルまでの相対パスか URL を記述すると読み込みを開始します。
 
new URLLoader ( URLRequest型 );
第01引数(略可)ファイルまでの相対パスかURLをURLRequest型で指定します。
戻り値 URLLoader オブジェクト
 
URLLoader オブジェクトを作成する

var  url = new URLRequest("http://hakuhin.jp/test.txt");
var url_loader : URLLoader = new URLLoader(url);
 
■読み込みを開始する

コンストラクタを呼び出す際に引数を省略した場合、後から load() メソッドを使って読み込みを開始することも出来ます。引数にファイルまでの相対パスかURLを指定します。
すでに読み込み中にもかかわらずこのメソッドを呼び出した場合は、以前の読み込み処理が終了し新しく読み込みを開始します。
 
URLLoader.load ( URLRequest型 , LoaderContext型 );
第01引数 ファイルまでの相対パスかURLをURLRequest型で指定します。
第02引数(略可)セキュリティに関する情報をLoaderContext型で指定します。
戻り値 なし
 
ファイルの読み込みを開始する

var url_loader : URLLoader = new URLLoader();

var url : URLRequest = new URLRequest("http://hakuhin.jp/test.txt");
url_loader.load(url);

swfファイルからの相対パスを使う事もできる

var loader_obj : URLLoader = new URLLoader();

var url : URLRequest = new URLRequest("../text/test.txt");
loader_obj.load(url);
 
■読み込みを停止する

読み込みを停止したい場合は、close() メソッドを呼び出します。
 
読み込みを開始していないときに呼び出したり、すでに停止した後にもう一度呼び出すとエラーとなります。
 
読み込みを停止する

var url_loader : URLLoader = new URLLoader();

var url : URLRequest = new URLRequest("test.txt");
url_loader.load(url);

try{
	url_loader.close();
}catch(e:Error){
	trace("停止失敗");
}
 

 
■読み込んだデータを表示する

読み込みに成功すると、data プロパティに String型 でデータが格納されます。
 
テキストファイルを読み込み トレース表示する

var url : URLRequest = new URLRequest("test.txt");
var url_loader : URLLoader = new URLLoader();

// 読み込み完了時に呼び出されるイベント
url_loader.addEventListener (Event.COMPLETE,LoaderInfoCompleteFunc);
function LoaderInfoCompleteFunc (event : Event) {
	var str : String = url_loader.data;
	trace(str);
}
 
■ストリーム読み込みのローティング状況を知る

どれだけ読み込まれたかのローディング状況を知りたい場合は、
 
Event.OPEN、
ProgressEvent.PROGRESS、
Event.COMPLETE、
IOErrorEvent.IO_ERROR
SecurityErrorEvent.SECURITY_ERROR
 
イベントを使用します。
 
読み込み状況を知る

var url_loader : URLLoader = new URLLoader();

url_loader.addEventListener (Event.OPEN,URLLoaderOpenFunc);
function URLLoaderOpenFunc (event : Event) {
	trace ("読み込みを開始した");
}

url_loader.addEventListener (ProgressEvent.PROGRESS,URLLoaderProgressFunc);
function URLLoaderProgressFunc (event : ProgressEvent) {
	trace ("読込:" + event.bytesLoaded);
	trace ("全体:" + event.bytesTotal);
	trace ("パーセント:" + Math.floor(event.bytesLoaded/event.bytesTotal*100));
}

url_loader.addEventListener (Event.COMPLETE,URLLoaderCompleteFunc);
function URLLoaderCompleteFunc (event : Event) {
	trace ("読み込みを完了");
}

url_loader.addEventListener (IOErrorEvent.IO_ERROR,URLLoaderIOErrorFunc);
function URLLoaderIOErrorFunc (event : IOErrorEvent) {
	trace ("ファイル入出力のエラー");
}

url_loader.addEventListener (SecurityErrorEvent.SECURITY_ERROR,
URLLoaderSecurityErrorFunc); function URLLoaderSecurityErrorFunc (event : SecurityErrorEvent) { trace ("セキュリティのエラー"); } // 読み込み開始 var url : URLRequest = new URLRequest("test.txt"); url_loader.load(url);
 
bytesLoaded プロパティ、bytesTotal プロパティ を使用して調べる事もできます。
 
読み込み状況を知る

var url : URLRequest = new URLRequest("test.txt");
var url_loader : URLLoader = new URLLoader(url);
url_loader.load(url);

stage.addEventListener (Event.ENTER_FRAME,EnterFrameFunc);
function EnterFrameFunc (event : Event) {
	trace ("読込:" + url_loader.bytesLoaded);
	trace ("全体:" + url_loader.bytesTotal);
	trace ("パーセント:" + Math.floor(url_loader.bytesLoaded / url_loader.bytesTotal*100));
}

 
■読み込んだテキストファイルが文字化けする

テキストファイルの文字コードは UTF-8 にします。
 
どうしても Shift-JIS のテキストファイルを読み込む場合は、 System.useCodePage プロパティを true に変更します。
 
コードページを有効にすると、「テキストファイルの文字コード」を「 OS 内部の文字コード」と同じものと解釈します。例えば、英語版の Windows XP では "CP1252"、日本語版の Windows XP では "Shift-JIS" となります。
 
「OS 内部の文字コード」と同じ文字コードで保存されたテキストファイルを読み込む

System.useCodePage = true;
 
■サンドボックスについて

swf ファイルから別ドメインにあるテキストファイルを読み込む場合、サンドボックスによる制限があります。
 
そのままでは、テキストファイルを読み込むことはできません。
 
サンドボックスによる制限を解除するには、クロスドメインポリシーファイルを設置する必要があります。
 
 



XMLファイルを読み込む
 

サンプルをダウンロード
 
 
■URLLoader クラスをインスタンス化する

まず URLLoader クラスをインスタンス化します。
 
引数にURLRequest型で XML ファイルまでの相対パスか URL を記述すると読み込みを開始します。
 
new URLLoader ( URLRequest型 );
第01引数(略可)ファイルまでの相対パスかURLをURLRequest型で指定します。
戻り値 URLLoader オブジェクト
 
URLLoader オブジェクトを作成する

var  url = new URLRequest("http://hakuhin.jp/test.xml");
var url_loader : URLLoader = new URLLoader(url);
 
■読み込みを開始する

コンストラクタを呼び出す際に引数を省略した場合、後から load() メソッドを使って読み込みを開始することも出来ます。引数にファイルまでの相対パスかURLを指定します。

すでに読み込み中にもかかわらずこのメソッドを呼び出した場合は、以前の読み込み処理が終了し新しく読み込みを開始します。
 
URLLoader.load ( URLRequest型 , LoaderContext型 );
第01引数 ファイルまでの相対パスかURLをURLRequest型で指定します。
第02引数(略可)セキュリティに関する情報をLoaderContext型で指定します。
戻り値 なし
 
ファイルの読み込みを開始する

var url_loader : URLLoader = new URLLoader();

var url : URLRequest = new URLRequest("http://hakuhin.jp/test.xml");
url_loader.load(url);

swfファイルからの相対パスを使う事もできる

var loader_obj : URLLoader = new URLLoader();

var url : URLRequest = new URLRequest("../text/test.xml");
loader_obj.load(url);
 
■読み込みを停止する

読み込みを停止したい場合は、close() メソッドを呼び出します。
 
読み込みを開始していないときに呼び出したり、すでに停止した後にもう一度呼び出すとエラーとなります。
 
読み込みを停止する

var url_loader : URLLoader = new URLLoader();

var url : URLRequest = new URLRequest("test.xml");
url_loader.load(url);

try{
	url_loader.close();
}catch(e:Error){
	trace("停止失敗");
}
 



■読み込んだデータを表示する

読み込みに成功すると、data プロパティに String型 でデータが格納されます。
 
この文字列を引数にセットして XML クラスをインスタンス化すると XML オブジェクトが作成できます。
 
XML ファイルを読み込み トレース表示する

var url : URLRequest = new URLRequest("test.xml");
var url_loader : URLLoader = new URLLoader();

// 読み込み完了時に呼び出されるイベント
url_loader.addEventListener (Event.COMPLETE,LoaderInfoCompleteFunc);
function LoaderInfoCompleteFunc (event : Event) {
	var xml : XML = new XML(url_loader.data);
	trace(xml);
}
 
■XML オブジェクトからデータを取り出す

以下のようなXMLを読み込んだとします。
 
読み込むXMLファイル

<XML>
	<data>テスト1</data>
	<obj1 id = "属性1">
		<data1>テスト2</data1>
		<data2>テスト3</data2>
		<data3>テスト4</data3>
	</obj1>
	<obj2 id = "属性2">
		<data1>テスト5</data1>
		<data2>テスト6</data2>
		<data3>テスト7</data3>
	</obj2>
</XML>
 
要素名をドット "." で繋げていくと、要素のデータにアクセスできます。

先頭に "@" を付けて属性名を指定すると、属性のデータにアクセスできます。

"*" を指定するとそのノードを抽出できます。
 
XMLオブジェクトからデータを取り出す

var url : URLRequest = new URLRequest("test.xml");
var url_loader : URLLoader = new URLLoader(url);

// 読み込み完了時に呼び出されるイベント
url_loader.addEventListener (Event.COMPLETE,LoaderInfoCompleteFunc);
function LoaderInfoCompleteFunc (event : Event) {

	var xml : XML = new XML(url_loader.data);

	trace(xml.data);         // テスト1
	trace(xml.obj1.@id);     // 属性1
	trace(xml.obj1.data1);   // テスト2
	trace(xml.obj1.data2);   // テスト3
	trace(xml.obj1.data3);   // テスト4
	trace(xml.obj2.@id));    // 属性2
	trace(xml.obj2.data1);   // テスト5
	trace(xml.obj2.data2);   // テスト6
	trace(xml.obj2.data3);   // テスト7

	trace(xml.obj1.*);       // 抽出

}
 
■ XML 文字列からオブジェクトに変換する例

XMLDocumentクラスを使ったXML 文字列から Object型の変数に変換する関数例です。
属性は無視されます。ノードとノードの間にテキストを挟むとおかしくなります。
 
XMLオブジェクトからデータを取り出す関数

function XmlToObject (str : String) {
	var result:XMLDocument = new XMLDocument();
	result.ignoreWhite = true;
	result.parseXML (str);
	var obj:Object = _XmlToObject(result);
	return obj.value;
}
function _XmlToObject (node:XMLNode):Object {
	var i;
	var obj : Object = new Object();
	var child : Array = node.childNodes;
	var l = child.length;
	for (i=0; i < l; i++) {
		var cld = child[i];
		if (cld.nodeType == 1) {
			    var c : Object = _XmlToObject(cld);
			    obj[c.name] = c.value;
		} else if (cld.nodeType == 3) {
			    return {name:node.nodeName,value:cld.nodeValue};
		}
	}
	return {name:node.nodeName,value:obj};
}
 
使い方

var url : URLRequest = new URLRequest("test.xml");
var url_loader : URLLoader = new URLLoader(url);

// 読み込み完了時に呼び出されるイベント
url_loader.addEventListener (Event.COMPLETE,LoaderInfoCompleteFunc);
function LoaderInfoCompleteFunc (event : Event) {

	var obj : Object = XmlToObject(url_loader.data);

}
 
■ストリーム読み込みのローティング状況を知る

どれだけ読み込まれたかのローディング状況を知りたい場合は、
 
Event.OPEN、
ProgressEvent.PROGRESS、
Event.COMPLETE、
IOErrorEvent.IO_ERROR、
SecurityErrorEvent.SECURITY_ERROR
 
イベントを使用します。
 
読み込み状況を知る

var url_loader : URLLoader = new URLLoader();

url_loader.addEventListener (Event.OPEN,URLLoaderOpenFunc);
function URLLoaderOpenFunc (event : Event) {
	trace ("読み込みを開始した");
}

url_loader.addEventListener (ProgressEvent.PROGRESS,URLLoaderProgressFunc);
function URLLoaderProgressFunc (event : ProgressEvent) {
	trace ("読込:" + event.bytesLoaded);
	trace ("全体:" + event.bytesTotal);
	trace ("パーセント:" + Math.floor(event.bytesLoaded/event.bytesTotal*100));
}

url_loader.addEventListener (Event.COMPLETE,URLLoaderCompleteFunc);
function URLLoaderCompleteFunc (event : Event) {
	trace ("読み込みを完了");
}

url_loader.addEventListener (IOErrorEvent.IO_ERROR,URLLoaderIOErrorFunc);
function URLLoaderIOErrorFunc (event : IOErrorEvent) {
	trace ("ファイル入出力のエラー");
}

url_loader.addEventListener (SecurityErrorEvent.SECURITY_ERROR,
URLLoaderSecurityErrorFunc); function URLLoaderSecurityErrorFunc (event : SecurityErrorEvent) { trace ("セキュリティのエラー"); } // 読み込み開始 var url : URLRequest = new URLRequest("test.xml"); url_loader.load(url);
 
bytesLoaded プロパティ、bytesTotal プロパティを使用して調べる事もできます。
 
読み込み状況を知る

var url : URLRequest = new URLRequest("test.xml");
var url_loader : URLLoader = new URLLoader(url);
url_loader.load(url);

stage.addEventListener (Event.ENTER_FRAME,EnterFrameFunc);
function EnterFrameFunc (event : Event) {
	trace ("読込:" + url_loader.bytesLoaded);
	trace ("全体:" + url_loader.bytesTotal);
	trace ("パーセント:" + Math.floor(url_loader.bytesLoaded / url_loader.bytesTotal * 100));
}
 
■読み込んだ XML ファイルが文字化けする

XML ファイルの文字コードは UTF-8 にします。
 
どうしても Shift-JIS の XML ファイルを読み込む場合は、 System.useCodePage プロパティを true に変更します。
 
コードページを有効にすると、「 XML ファイルの文字コード」を「 OS 内部の文字コード」と同じものと解釈します。例えば、英語版の Windows XP では "CP1252"、日本語版の Windows XP では "Shift-JIS" となります。
 
「OS 内部の文字コード」と同じ文字コードで保存された XML ファイルを読み込む

System.useCodePage = true;
 
■サンドボックスについて

swf ファイルから別ドメインにある XML ファイルを読み込む場合、サンドボックスによる制限があります。
 
そのままでは、 XML ファイルを読み込むことはできません。
 
サンドボックスによる制限を解除するには、クロスドメインポリシーファイルを設置する必要があります。
 
 



FLVファイルを読み込む
 

サンプルをダウンロード
 
 
■NetConnection クラスをインスタンス化する

まず NetConnection クラスをインスタンス化します。
 
connect() メソッドに null を指定してローカルファイルアクセス用のコネクションを作成します。
 
ローカルファイルアクセス用のネットコネクションを作成する

var connection:NetConnection = new NetConnection();
connection.connect(null);
 
■NetStream クラスをインスタンス化する

先ほど作成した NetConnection オブジェクトを使って今度は NetStream クラスをインスタンス化します。

NetStream オブジェクトは、Flash Video 動画の再生等の制御に使います。
 
ネットストリームオブジェクトを作成する

var connection:NetConnection = new NetConnection();
connection.connect(null);

var netStream:NetStream = new NetStream(connection);
 
■画面上に表示する

次に Video クラスをインスタンス化します。Video クラスは FlashVideo 動画を表示するために使います。
 
Video クラスは、DisplayObject クラスから派生しています。
 
new Video ( 幅 , 高さ );
第01引数(略可)表示したいインスタンスの幅を指定します。(デフォルト:320)
第01引数(略可)表示したいインスタンスの高さを指定します。(デフォルト:240)
戻り値 なし

ビデオオブジェクトを作成する

var video_obj:Video = new Video();
 
ビデオオブジェクトを表示リストに登録すると画面上に表示する事ができます。
 
ここでは、stage の表示リストに登録します。
 
ビデオオブジェクトをステージの表示リストに登録する

var video_obj : Video = new Video();
stage.addChild(video_obj);
 
最後に attachNetStream() メソッドを使用して、ビデオオブジェクトとネットストリームオブジェクトを関連付けます。
 
ビデオオブジェクトとネットストリームオブジェクトを関連付ける

var connection:NetConnection = new NetConnection();
connection.connect(null);

var netStream:NetStream = new NetStream(connection);

var video_obj : Video = new Video();
stage.addChild(video_obj);

video_obj.attachNetStream(netStream);
 



■ストリーム読み込みを開始して再生する

play() メソッドを使用するとストリーム読み込みを開始することができます。
 
引数に FLV ファイルまでの相対パスかURLを指定します。
 
FLVファイルのストリーム読み込みを開始する

var connection:NetConnection = new NetConnection();
var netStream:NetStream = new NetStream(connection);

netStream.play("http://hakuhin.jp/test.flv");
 
「flash.net.NetStream はコールバック onMetaData を呼び出すことができませんでした」というエラーが出る場合は、メタデータ取得用のイベントを登録するといいようです。記述方法はこちら
 
■ストリーム読み込みを切断する

close() メソッドを使用するとストリーム読み込みを終了します。
 
FLVファイルのストリーム読み込みを終了する

var connection:NetConnection = new NetConnection();
var netStream:NetStream = new NetStream(connection);

netStream.close();

FlashPlayer が作成したローカルキャッシュは削除されますが、ブラウザのキャッシュは残る事があります。
 
■一時停止と再生を切り替える

動画を一時停止したい場合は、pause() メソッドを呼び出します。
 
一時停止

netStream.pause();
 
一時停止した動画を再び再生したい場合は、resume() メソッドを呼び出します。
 
一時停止状態の動画を再生

netStream.resume();
 
一時停止と再生を交互に繰り返したい場合は、togglePause() メソッドを呼び出します。
 
一時停止と再生を交互に

netStream.togglePause();
 
■再生位置(ヘッダ)を取得、変更する

現在再生中の位置(単位:秒)を取得するには time プロパティを使用します。
 
再生ヘッドの位置を調べる

var time : Number = netStream.time;
 
再生ヘッダの位置(単位:秒)を変更するには seek() メソッドを使用します。
 
シーク可能な最短位置にジャンプします。
 
再生ヘッドを15秒の位置に変更する

netStream.seek(15);
 



■ストリーム読み込みのローティング状況を知る

どれだけ読み込まれたかのローディング状況が知りたい場合は、bytesLoadedbytesTotal、プロパティを使用します。
 
読み込み状況を知る

var connection:NetConnection = new NetConnection();
var netStream:NetStream = new NetStream(connection);
netStream.play("http://hakuhin.jp/test.flv");

stage.addEventListener (Event.ENTER_FRAME,EnterFrameFunc);
function EnterFrameFunc (event : Event) {
	trace ("読込:" + netStream.bytesLoaded);
	trace ("全体:" + netStream.bytesTotal);
	trace ("パーセント:" + Math.floor(netStream.bytesLoaded/
netStream.bytesTotal*100)); trace ("バッファが満たされていない状態の経過時間(秒):"
+ netStream.bufferLength); }
 
また、

IOErrorEvent.IO_ERROR、
NetStatusEvent.NET_STATUS


イベントに対応しています。
 
イベント通知を受け取る

var connection:NetConnection = new NetConnection();
var netStream:NetStream = new NetStream(connection);

netStream.addEventListener (IOErrorEvent.IO_ERROR,URLLoaderIOErrorFunc);
function URLLoaderIOErrorFunc (event : IOErrorEvent) {
	trace ("ファイル入出力のエラー");
}

netStream.addEventListener (NetStatusEvent.NET_STATUS ,URLLoaderProgressFunc);
function URLLoaderProgressFunc (event : NetStatusEvent) {
	switch(event.info.code){
	case "NetStream.Buffer.Empty":
		trace("バッファが空になったので中断");
		break;
	case "NetStream.Buffer.Full":	
		trace("バッファを満たしたので再生");
		break;
	case "NetStream.Buffer.Flush":
		trace("ストリーム読み込みが終了した");
		break;
	case "NetStream.Play.Start":
		trace("再生の開始");
		break;
	case "NetStream.Play.Stop":
		trace("再生の停止");
		break;
	case "NetStream.Play.StreamNotFound":
		trace("FLV ファイルが見つからない");
		break;
	case "NetStream.Play.Failed":
		trace("その他のエラー");
		break;
	case "NetStream.Seek.Failed":
		trace("シークが失敗した");
		break;
	case "NetStream.Seek.InvalidTime":
		trace("有効ではないシーク時間を指定した");
		trace("指定可能なシーク時間 : " + event.info.details);
		break;
	case "NetStream.Seek.Notify":
		trace("シーク操作を完了できた");
		break;
	default:
		trace("その他のイベントコード:" + event.info.code);
	}
}

netStream.play("http://hakuhin.jp/test.flv");
 
■FLVファイルの情報を取得する

onMetaData イベントハンドラを使うと再生を開始する直前にメタデータを通知してくれます。

適当なオブジェクトを作成し onMetaData プロパティにコールバック関数を入れておきます。そしてオブジェクトを NetStream.client プロパティに渡します。

FLV ファイルにメタデータが埋め込まれていない場合は呼び出されないのでここで得られる値をコンテンツに使用する場合は注意してください。
 
イベント通知を受け取る

var connection:NetConnection = new NetConnection();
connection.connect(null);
var netStream:NetStream = new NetStream(connection);

var obj:Object = new Object();
obj.onMetaData = function(param:Object){

	trace("総時間 : " + param.duration + "秒");
	trace("幅 : " + param.width);
	trace("高さ : " + param.height);
	trace("ビデオレート : " + param.videodatarate + "kb");
	trace("フレームレート : " + param.framerate + "fps");
	trace("コーデックID : " + param.videocodecid);

	var key:String;
	for (key in param){
		trace(key + ": " + param[key]);
	}
}
netStream.client = obj;

netStream.play("http://hakuhin.jp/test.flv");
 



■オーディオを制御する

soundTransform プロパティにアクセスするとオーディオにボリュームやパンといった効果を付けることができます。詳しくはこちらをご覧下さい。
 
オーディオやパンを変更する

var trans : SoundTransform = netStream.soundTransform;

trans.volume = 0.5;	// ボリューム(0.0 ~ 1.0)
trans.pan = 1;		// パン(-1.0 ~ 0.0 ~ 1.0)

netStream.soundTransform = trans;
 
 



バイナリファイルを読み込む
 

サンプルをダウンロード
 
 
■URLLoader クラスをインスタンス化する

まず URLLoader クラスをインスタンス化します。
 
引数は省略して下さい。
 
new URLLoader ( URLRequest型 );
第01引数(略可)読み込みたいファイルまでの相対パスかURLをURLRequest型で指定します。
戻り値 URLLoader オブジェクト
 
URLLoader オブジェクトを作成する

var url_loader : URLLoader = new URLLoader();
 
■読み込む形式をバイナリに変更する

dataFormat プロパティに URLLoaderDataFormat.BINARY をセットするとバイナリ形式としてファイルを読み込むようになります。
 
文字列説明
URLLoaderDataFormat.
TEXT
"text"テキスト形式で読み込みます。結果、data プロパティにString 型で格納されます。
URLLoaderDataFormat.
BINARY
"binary"バイナリ形式で読み込みます。結果、data プロパティにByteArray 型で格納されます。
URLLoaderDataFormat.
VARIABLES
"variables"URL エンコード形式の変数として受信します。
 
バイナリ形式で読み込む

url_loader.dataFormat = URLLoaderDataFormat.BINARY;
 
■読み込みを開始する

load() メソッドを使って読み込みを開始します。
 
引数にファイルまでの相対パスかURLを指定します。
 
すでに読み込み中にもかかわらずこのメソッドを呼び出した場合は、以前の読み込み処理が終了し新しく読み込みを開始します。
 
URLLoader.load ( URLRequest型 , LoaderContext型 );
第01引数 ファイルまでの相対パスかURLをURLRequest型で指定します。
第02引数(略可)セキュリティに関する情報をLoaderContext型で指定します。
戻り値 なし
 
ファイルの読み込みを開始する

var url_loader : URLLoader = new URLLoader();

var url : URLRequest = new URLRequest("http://hakuhin.jp/test.dat");
url_loader.load(url);

swfファイルからの相対パスを使う事もできる

var loader_obj : URLLoader = new URLLoader();

var url : URLRequest = new URLRequest("../text/test.dat");
loader_obj.load(url);
 
■読み込みを停止する

読み込みを停止したい場合は、close() メソッドを呼び出します。
 
読み込みを開始していないときに呼び出したり、すでに停止した後にもう一度呼び出すとエラーとなります。
 
読み込みを停止する

var url_loader : URLLoader = new URLLoader();

var url : URLRequest = new URLRequest("test.dat");
url_loader.load(url);

try{
	url_loader.close();
}catch(e:Error){
	trace("停止失敗");
}
 



■読み込んだデータにアクセスする

読み込みに成功すると、data プロパティに ByteArray型 でデータが格納されています。
 
バイナリデータにアクセスする

var url : URLRequest = new URLRequest("test.bmp");
var url_loader : URLLoader = new URLLoader();

// 読み込み完了時に呼び出されるイベント
url_loader.addEventListener (Event.COMPLETE,LoaderInfoCompleteFunc);
function LoaderInfoCompleteFunc (event : Event) {
	var data : ByteArray = url_loader.data;
	trace(data);
}
 
■ストリーム読み込みのローティング状況を知る

どれだけ読み込まれたかのローディング状況を知りたい場合は、

Event.OPEN、
ProgressEvent.PROGRESS、
Event.COMPLETE、
IOErrorEvent.IO_ERROR、
SecurityErrorEvent.SECURITY_ERROR


イベントを使用します。
 
読み込み状況を知る

var url_loader : URLLoader = new URLLoader();

url_loader.addEventListener (Event.OPEN,URLLoaderOpenFunc);
function URLLoaderOpenFunc (event : Event) {
	trace ("読み込みを開始した");
}

url_loader.addEventListener (ProgressEvent.PROGRESS,URLLoaderProgressFunc);
function URLLoaderProgressFunc (event : ProgressEvent) {
	trace ("読込:" + event.bytesLoaded);
	trace ("全体:" + event.bytesTotal);
	trace ("パーセント:" + Math.floor(event.bytesLoaded / event.bytesTotal * 100));
}

url_loader.addEventListener (Event.COMPLETE,URLLoaderCompleteFunc);
function URLLoaderCompleteFunc (event : Event) {
	trace ("読み込みを完了");
}

url_loader.addEventListener (IOErrorEvent.IO_ERROR,URLLoaderIOErrorFunc);
function URLLoaderIOErrorFunc (event : IOErrorEvent) {
	trace ("ファイル入出力のエラー");
}

url_loader.addEventListener (SecurityErrorEvent.SECURITY_ERROR,
URLLoaderSecurityErrorFunc); function URLLoaderSecurityErrorFunc (event : SecurityErrorEvent) { trace ("セキュリティのエラー"); } // 読み込み開始 var url : URLRequest = new URLRequest("test.bmp"); url_loader.load(url);
 
bytesLoaded プロパティ、bytesTotal プロパティ を使用して調べる事もできます。
 
読み込み状況を知る

var url : URLRequest = new URLRequest("test.bmp");
var url_loader : URLLoader = new URLLoader(url);
url_loader.load(url);

stage.addEventListener (Event.ENTER_FRAME,EnterFrameFunc);
function EnterFrameFunc (event : Event) {
	trace ("読込:" + url_loader.bytesLoaded);
	trace ("全体:" + url_loader.bytesTotal);
	trace ("パーセント:" + Math.floor(url_loader.bytesLoaded / url_loader.bytesTotal * 100));
}
 
■サンドボックスについて

swf ファイルから別ドメインにあるバイナリファイルを読み込む場合、サンドボックスによる制限があります。
 
そのままでは、バイナリファイルを読み込むことはできません。
 
サンドボックスによる制限を解除するには、クロスドメインポリシーファイルを設置する必要があります。
 
 



HAKUHIN's home page バナー http://hakuhin.jp/
(c) Hakuhin & 日新礼符 2002-2011 解像度1024×768以上 IE8.0以上推奨
/ 閲覧中: