blog.Ring.idv.tw

「loadVariables」vs.「LoadVars」(二)

「loadVariables」vs.「LoadVars」(二)


在這篇「loadVariables」vs.「LoadVars」(一)我們曾提及「loadVariables」vs.「LoadVars」資料傳送的差異,那我們該如何得知資料已載入完成了呢?是否有相對應的事件可以來協助我們呢?

「LoadVars」事件處理

利用「LoadVars」要得知資料是否已載入完成,其實是相當容易且直覺的,它提供了一個「onLoad」事件處理器來協助我們來達成實現,然而此事件是隸屬於系統事件(System Event),也就是它無法透過使用者來加以觸發的事件,而是仰賴Flash Player來觸發的,相反地,若是「onClick」等等之類的事件,則稱之為使用者事件(User Event),底下我們先來看此事件的描述:

onLoad Event Handler

public onLoad = function(success:Boolean) {}

此事件會在呼叫「LoadVars.load()」或「LoadVars.sendAndLoad()」結束時,才會由系統來加以觸發的事件,而系統會傳遞一個success參數作為判斷載入成功或失敗的變數。

範例如下:(data.txt是一個約1.8mb的文字資料,裡頭包含了「var0 ~ var99999」的變數資料,以及一個ok變數)

程式一

var data_lv:LoadVars = new LoadVars();
data_lv.onLoad = function(success)
{
	if(success)
	{
		trace("Loaded!");
		trace(this.ok);
	}else{
		trace("Failed!");
	}
}
data_lv.load("data.txt");

結果:

Loaded!
1

此「onLoad」事件的確只會在「LoadVars.load()」或「LoadVars.sendAndLoad()」結束時才會觸發的事件。

「loadVariables」事件處理

相較於「LoadVars」來說,要判斷「loadVariables」是否已完成載入資料,便顯得較為煩瑣些,雖然使用「loadVariables」會觸發「MovieClip.onData」事件,但值得注意的是並不是只有「loadVariables」才會觸發此事件,「loadMovie」也會觸發此一事件,而且還必須作些手腳來達成判斷資料是否已「完全」載入,我們先看下述這個範例:

程式二

this.loadVariables("data.txt");
this.onData = function()
{
	if(this.ok == undefined)
	{
		trace("Loading...");
	}else{
		trace("Loaded!");
		trace(this.ok);
	}
}

結果:

Loading...
Loaded!
1

從執行的結果上來觀察,我們可以知道「onData」這個事件至少被系統呼叫了「兩」次,這也就是為何筆者需要加上一個「ok」變數資料在「data.txt」文件上,那是否還有額外的方式可以處理呢?其實我們也可以利用「MovieClip.onEnterFrame」來做個輪詢的方式來偵測資料是否已載入完成,或是利用「setInterval」來協助我們達成,底下是個別的作法:

setInterval

this.loadVariables("data.txt");
function checkParamsLoaded()
{
	if(_root.ok == undefined)
	{
		trace("Loading...");
	}else{
		trace("Loaded!");
		trace(_root.ok);
		clearInterval(param_interval);
	}
}
var param_interval = setInterval(checkParamsLoaded, 100);

結果:

Loading...
Loaded!
1

MovieClip.onEnterFrame

this.loadVariables("data.txt");
this.onEnterFrame = function()
{
	if(this.ok == undefined)
	{
		trace("Loading...");
	}else{
		trace("Loaded!");
		trace(this.ok);
		delete this.onEnterFrame;
	}
}

結果:(根據你的FPS而定,筆者環境FPS=30)

Loading...
Loading...
Loaded!
1

範例下載

本文若有任何謬誤,希望請不吝地賜教,若能指正不勝感激。

2007-07-18 22:32:23

Leave a Comment

Copyright (C) Ching-Shen Chen. All rights reserved.

::: 搜尋 :::

::: 分類 :::

::: Ads :::

::: 最新文章 :::

::: 最新回應 :::

::: 訂閱 :::

Atom feed
Atom Comment