付達杰
摘 要:在交互動畫設(shè)計中,對數(shù)據(jù)的存取十分重要。本文對Flash中本地數(shù)據(jù)存取的方法進行了深入的討論,并通過實例比較了各種方法的使用特點。
關(guān)鍵詞:Flash;本地數(shù)據(jù);LoadVars;數(shù)據(jù)存取
中圖分類號:G433 文獻標識碼:B 文章編號:1673-8454(2009)18-0060-03
引言
從1996年Flash1.0正式命名開始,到今年Adobe 官方宣布Flash CS4的推出,Flash技術(shù)及其軟件版本的更新已經(jīng)成為互聯(lián)網(wǎng)時代最為引人注目的焦點之一,成為網(wǎng)絡(luò)、多媒體、影視、廣告、教育等領(lǐng)域的技術(shù)新寵,可以說交互式矢量動畫特點是其得以廣泛應(yīng)用的看家本領(lǐng)。Flash交互動畫是通過一系列Action Script代碼來實現(xiàn)的,其中,對外部數(shù)據(jù)的操作是實現(xiàn)交互的重要技術(shù),最基本的數(shù)據(jù)操作就是數(shù)據(jù)的讀取和保存,讀取也稱為調(diào)用。如Flash多媒體課件中常常需調(diào)用外部文本教案、文本試題、保存試題答案等。以下對Flash存取本地數(shù)據(jù)的幾種方法進行比較(代碼調(diào)試版本為Flash8.0)。
一、本地數(shù)據(jù)的讀取
作為多媒體創(chuàng)作環(huán)境,Flash常調(diào)用的本地數(shù)據(jù)包括各種多媒體文件如文本、圖片、聲音、動畫以及腳本文件等。Flash可以通過幀、按鈕、影片剪輯來實現(xiàn)對這些本地數(shù)據(jù)的調(diào)用?,F(xiàn)以文本文件調(diào)用為例來分析本地數(shù)據(jù)讀取策略,本地文本文件的調(diào)用往往是通過動態(tài)文本框來實現(xiàn)的。
1.使用loadVariables()函數(shù)調(diào)用本地文本文件及其特點
格式:public loadVariables(url:String, [method:String]) : Void
loadVariables()從外部文件讀取數(shù)據(jù)并設(shè)置影片剪輯中變量的值。外部文件可以是 Macromedia ColdFusion 生成的文本文件、CGI 腳本、Active Server Page (ASP)、PHP 腳本或任何其它格式正確的文本文件。此文件可以包含任意數(shù)量的變量。使用此方法調(diào)用文本時最關(guān)鍵的是文本文件開頭要以Flash中的動態(tài)文本框的變量名開頭,如wt=""這樣的形式(wt為動態(tài)文本框的變量名),且要和編輯的Flash文檔放在同一目錄下。具體可參照如下設(shè)計步驟:
①新建一Flash文檔,并在場景中添加一個動態(tài)文本,給動態(tài)文本一個變量名,如wt;
②繼續(xù)在場景中添加一個按鈕用于調(diào)用文本;
③調(diào)用按鈕上添加AS:
on(release){//釋放鼠標后執(zhí)行如下代碼;
loadVariables("wt.txt",wt);//調(diào)用和與Flash處于同一目錄下的wt.txt文本文件到動態(tài)文本wt中;
System.useCodepage=true;//使外部文件的中文字符能夠正確顯示;
}
若要將文本加載到特定級別,可以使用 loadVariablesNum()。loadVariables()函數(shù)調(diào)用方法雖然簡單實用,卻有一些不足。其特點主要表現(xiàn)在三個方面:一是代碼簡單,僅需動態(tài)文本設(shè)定一個變量名,節(jié)約了系統(tǒng)資源;二是Flash文件只能調(diào)用與其在同一目錄下的外部文本,限制了調(diào)用的靈活性;三是對文本要求嚴格,文本的開頭必須以動態(tài)文本框變量名開始,影響了文本的編輯。因此,在頻繁大規(guī)模調(diào)用外部文本時,這種方法不可取。
2.使用LoadVars類調(diào)用本地文本文件及其特點
LoadVars 類是 loadVariables() 函數(shù)的替代方法,用于在 Flash 應(yīng)用程序和服務(wù)器之間傳輸變量。[1]LoadVars.onLoad 處理函數(shù)來確保應(yīng)用程序在加載數(shù)據(jù)之時(而不是之前)運行。此方法對文本文件的具體位置沒有限制,使得其更具有靈活性。在調(diào)用按鈕時添加如下代碼:
①新建一Flash文檔,并在場景中添加一個動態(tài)文本,動態(tài)文本實例名稱為wd;
②繼續(xù)在場景中添加一個按鈕,調(diào)用文本;
③調(diào)用按鈕上添加AS:
on(release){//釋放鼠標后執(zhí)行如下代碼;
System.useCodepage = true; //使外部文件的中文字符能夠正確顯示;
var wen_txt:LoadVars = new LoadVars();//創(chuàng)建一個LoadVars對象的實例,實例名為wen_txt;
wen_txt.load("text/jiao/11.txt");載入位于text/jiao/11.txt目錄下的11.txt文件;
wen_txt.onData = function(wen:String) {//將文本數(shù)據(jù)傳遞給字符串wen;
wd.text = wen;// 在載入操作完成時在名wd實例中文本框中顯示文本;
}
}
作為loadVariables() 函數(shù)的替代方法,LoadVars類可以發(fā)送那些可使應(yīng)用程序更加有效的特定變量,而不是所有變量。它具有兩個顯著特點:一是以動態(tài)文本框?qū)嵗齮ext屬性值顯示文本,無需定義動態(tài)文本框變量;二是突破了loadVariables()函數(shù)對于外部文本的內(nèi)容約束和位置限制,可以調(diào)用本機上任何位置的任何文本。
以上兩種方法,常常都需結(jié)合動態(tài)文本框來調(diào)用外部文本,都有一個共同的缺陷,即調(diào)入文本無法保持原有的格式??傮w上說,較之loadVariables() 函數(shù),LoadVars類雖然在代碼上要復(fù)雜,但由于對外部文本不設(shè)限,因此調(diào)用效率相對來說比較高。
二、本地數(shù)據(jù)的保存
以前在Flash中常用fscommond來保存本地外部文本文件,自FlashMX始,出于對安全因素的考慮,Macromedia舍棄了這種數(shù)據(jù)保存方法。但是,仍然可以用以下三種方法實現(xiàn)對本地外部文本文件的保存。
1.使用MMsavve()函數(shù)保存外部文本及其特點
格式:MMSave(textString, txtFileName)
其中參數(shù)textString表示字符串,用來記錄要保存的數(shù)據(jù)內(nèi)容,參數(shù)txtFileName表示被保存的文本文件名。此函數(shù)是Flash專門用來存盤的函數(shù),出于對安全因素的考慮,Macromedia隱藏了它。默認的存儲路徑是:Application DataMacromediaFlash MXConfiguration;對于Windows2000(XP)用戶來說,默認的存儲路徑是:Documents and Settings[User]Application DataMacromediaFlash MXConfiguration。
示例:在場景中建立一個動態(tài)文本(變量名為name)并設(shè)置一個按鈕(實例名為send_btn)。然后在第一幀加入下面的代碼:
send_btn.onRelease = function() {
MMSave(name, "../../../../../../data.txt");
};
按“Ctrl+Enter”測試即可將輸入的姓名保存在C盤的data.txt中,但函數(shù)只能用在編輯器的調(diào)試播放下,在IE或者其他播放器中就會失效。
2.使用SharedObject(共享對象)保存外部數(shù)據(jù)及其特點
SharedObject 類用于在用戶計算機上讀取和存儲有限的數(shù)據(jù)量。共享對象提供永久貯存在用戶計算機上的對象之間的實時數(shù)據(jù)共享。本地共享對象與瀏覽器 cookie 類似??梢园阉醋餍⌒偷臄?shù)據(jù)庫,能夠存儲任何Flash支持的數(shù)據(jù)類型,比如數(shù)字、字符串、數(shù)組和對象等等,常在游戲中用來存儲用戶高分。SharedObject按存放位置可分為本地型(存在客戶端)和遠程型(存在服務(wù)器端)。本地型共享對象的擴展名為.sol。對于Windows98(ME)用戶來說,默認的存儲路徑是:Application DataMacromediaFlash Player服務(wù)器域名路徑Flash電影文件名.swf;對于Windows2000(XP)用戶來說,默認的存儲路徑是:Documents and Settings[User]Application DataMacromediaFlash Player服務(wù)器域名路徑Flash電影文件名.swf。[2] 本地型共享對象的擴展名為.sol。
根據(jù)上述示例,將第一幀代碼更改為:
var user_so = sharedobject.getlocal("user"); // 建立共享對象的參照,user為共享對象名;
send_btn.onRelease = function() {
with (user_so) {
data.name = name; //用data屬性和flush方法保存用戶輸入的用戶名
flush();
}
};
運行之后,即可發(fā)現(xiàn)數(shù)據(jù)被存放到user.sol文件中。這種方法成功的關(guān)鍵因素是getLocal()方法、flush()方法和data屬性。
* flush([minDiskSpace:Number]) : Object,將本地永久共享對象立即寫入本地文件。
* getLocal(name:String, [localPath:String], [secure:Boolean]) : SharedObject,返回對本地永久共享對象的引用,該對象只可用于當(dāng)前客戶端。
* data:Object,分配給對象的 data 屬性的屬性集合;可以共享和/或存儲這些屬性。
這種方法雖然突破了MMsavve()方法只能在調(diào)試播放下方起作用的局限,實現(xiàn)了在IE和播放器下的保存效果,但本地型共享對象仍然只能將數(shù)據(jù)保存在默認路徑下,而且擴展名只能是.sol。另外,默認情況下,Flash在本地只能保存100k大小的永久性共享對象,不過可以通過設(shè)置來調(diào)整其保存容量。
3.結(jié)合JavaScript實現(xiàn)數(shù)據(jù)保存
利用fscommond命令將Flash獲得的數(shù)據(jù)傳遞到JavaScript中,使用JavaScript網(wǎng)頁編程實現(xiàn)本地數(shù)據(jù)的存儲。這個方法的本質(zhì)上是Flash5與JavaScript技術(shù)的組合,其中最為關(guān)鍵的一步是以Flash5的格式發(fā)布Flash電影和html文件和使用FileSystemObject(文件系統(tǒng)對象)完成數(shù)據(jù)寫入。因此,雖然這種方法沒有文本保存位置的局限,但嚴格來講,它實際上已經(jīng)不是純粹的Flash技術(shù)了。
以上三種方法,各有所長,應(yīng)視具體情況而作出選擇。MMsavve()方法適合于調(diào)試,SharedObject方法適合于游戲開發(fā),而結(jié)合JavaScript的方法則相對來說功能最強,適應(yīng)面更廣,實現(xiàn)成本也最大。
三、結(jié)束語
總體上講,Flash對外部數(shù)據(jù)的存取缺乏更多簡單有效的方式,這也是其作為網(wǎng)絡(luò)動畫制作工具高安全性要求所帶來的局限性。但在特殊需要的時候,仍然可以利用以上幾種方法進行本機數(shù)據(jù)的存取。值得注意的是,在方法選擇上務(wù)必要注意不同方法的特點及適合環(huán)境。
參考文獻:
[1] Adode官方網(wǎng)站[DB/OL].http://www.adobe.com
[2] 劉棟.Flashmx2004中利用SharedObject存取本地磁盤數(shù)據(jù)[J].電腦學(xué)習(xí).2006,(4):35-60.
(編輯:隗爽)