記得前些天看到有人問flash怎么在本地存儲(chǔ)信息的問題 想起在 http://www.ultrashock.com 看到的一篇關(guān)于SharedObject的文章 挑了一部分翻譯了一下,也做了一些補(bǔ)注。 第一次做翻譯工作,弄得不好各位多見諒。
什么是本地ShareObject?
通過flash 6 player,開發(fā)人員已就可以在客戶端存儲(chǔ)數(shù)據(jù)了,就像cookies一樣。ShareObject有兩種格式:本地和遠(yuǎn)程。這篇文章只討論
本地ShareObject.遠(yuǎn)程ShareObject一般和flash communication server一起使用。一個(gè)本地ShareObject只需要flash 6 player,僅此而已。很多情況下,ShareObject提供了除cookies外的另一種選擇,這是許多開發(fā)者沒有考慮過的。
存儲(chǔ)簡單數(shù)據(jù)
在ShareObject中存儲(chǔ)簡單數(shù)據(jù)是相當(dāng)簡單的工作,我們先用ShareObject存儲(chǔ)一個(gè)用戶自定義的對(duì)象,然后將討論用ShareObject存儲(chǔ)內(nèi)建類的實(shí)例的問題。一個(gè)用戶自定義對(duì)象可以這樣創(chuàng)建:myObj = new Object(); //or myObj = {};
在ShareObject中存儲(chǔ)myObj是很簡單的,首先你需要?jiǎng)?chuàng)建一個(gè)本地ShareObject的引用:myLSO = SharedObject.getLocal("foo"); getLocal方法的第一個(gè)參數(shù)是ShareObject的名字,getLocal()方法也有第二個(gè)可選參數(shù):一個(gè)字符串類型的路徑。大多數(shù)情況下你用不到這個(gè)參數(shù),除非你在多個(gè)swf文件中共用同一個(gè)ShareObject,F(xiàn)在為了在ShareObject中儲(chǔ)存數(shù)據(jù),你需要給ShareObject指定“數(shù)據(jù)特性”(data property),F(xiàn)在創(chuàng)建一個(gè)ShareObject引用,以及你想存儲(chǔ)的對(duì)象,最后存儲(chǔ)這個(gè)對(duì)象到“數(shù)據(jù)特性”中。 例子:myLSO = SharedObject.getLocal("foo"); myObj = {}; myObj.fname = "Jessica"; myObj.lname = "Smith"; myLSO.data.myObj = myObj
*****譯者注***** myLocalSharedObject.data 描述: 只讀屬性,用來存儲(chǔ)被存儲(chǔ)到“數(shù)據(jù)特性”中的對(duì)象的屬性,這些屬性可以共享/存儲(chǔ),每一個(gè)屬性可以是各種基礎(chǔ)數(shù)據(jù)類型(數(shù)組,數(shù)字布爾值等)對(duì)象 。 ****************
現(xiàn)在myObj已經(jīng)存儲(chǔ)在SharedObject中了,今后你可以通過對(duì)SharedObject數(shù)據(jù)屬性的存取來實(shí)現(xiàn)對(duì)myObj的存取,下面是一個(gè)例子,這個(gè)例子檢測是否數(shù)據(jù)已經(jīng)被存儲(chǔ)到SharedObject中了,如果沒有,它將數(shù)據(jù)存儲(chǔ)進(jìn)去,如果已經(jīng)存在,則在輸出窗口輸出。當(dāng)你將這些代碼放到一個(gè)空的電影的第一禎后,你可以運(yùn)行它一次,然后在運(yùn)行一次,第二次運(yùn)行你可以看到你存儲(chǔ)的數(shù)據(jù)被輸出。
*****譯者注***** 一定要先保存動(dòng)畫,否則你的動(dòng)畫只是在windows臨時(shí)文件夾 中運(yùn)行,不能存儲(chǔ)數(shù)據(jù)。 ****************myLSO = SharedObject.getLocal("foo"); if(myLSO.data.myObj == undefined){ trace("Storing Data, run me again"); myObj = {}; myObj.fname = "Jessica"; myObj.lname = "Smith"; myLSO.data.myObj = myObj; }else{ trace("Retrieving Data"); var firstname = myLSO.data.myObj.fname; var lastname = myLSO.data.myObj.lname; trace("First Name: "+firstname); trace("Last Name: "+lastname); } *****譯者注***** 運(yùn)行一次以上后,你可以將程序改為 myLSO = SharedObject.getLocal("foo"); trace("Retrieving Data"); var firstname = myLSO.data.myObj.fname; var lastname = myLSO.data.myObj.lname; trace("First Name: "+firstname); trace("Last Name: "+lastname); 你會(huì)發(fā)現(xiàn)無論你重復(fù)運(yùn)行多少次,甚至關(guān)閉flash后重新進(jìn)入,仍然能夠得到firstname和lastname的值。 另外你應(yīng)該可以理解getLocal()方法的參數(shù)的作用了,它用來表示你所存儲(chǔ)的數(shù)據(jù)的載體名稱,是必不可少的。 例如本例中的數(shù)據(jù)都存儲(chǔ)在名為foo的SharedObject中,只有g(shù)etLocal("foo"),你才能得到你想要的結(jié)果。 ****************
你還可以存儲(chǔ)更多內(nèi)建類型:數(shù)組,布爾值,日期,數(shù)字,對(duì)象,XML,undefined,null
下面是一個(gè)將日期實(shí)例存儲(chǔ)在SharedObject中的例子:myLSO = SharedObject.getLocal("DateStorage"); myDate = new Date(); myLSO.data.myDate = myDate;
*****譯者注***** 存儲(chǔ)簡單數(shù)據(jù)的方法到這基本上就介紹完了,是不是很簡單? 為了方便大家理解,我做了一個(gè)簡單的例子:
下載3.fla
你可以在文本框中輸入任何內(nèi)容,然后點(diǎn)擊儲(chǔ)存, 以后任何時(shí)候你打開這個(gè)swf,文本框中總是上一次儲(chǔ)存的內(nèi)容。
我現(xiàn)在想到的對(duì)SharedObject最有意思的應(yīng)用就是游戲存檔 ! 只要將與游戲相關(guān)的數(shù)據(jù),如時(shí)間,分?jǐn)?shù),等級(jí),屏幕位置等相關(guān)數(shù)據(jù)存儲(chǔ) 再在必要的時(shí)候提取出來,基本上就算是實(shí)現(xiàn)存檔取檔功能。 希望有興趣的朋友試試。 另外,在使用SharedObject之前,別忘了把你的Flash Player的文件存儲(chǔ)設(shè)置為無限制 ,如圖:
否則,超過了Player文件存儲(chǔ)的上限(默認(rèn)好像10k),ShareObject將不起作用
存儲(chǔ)復(fù)雜數(shù)據(jù)一般指得是存儲(chǔ)自定義類的實(shí)例 。這一部分因?yàn)闀r(shí)間關(guān)系(要復(fù)習(xí)考試)沒有翻譯,等有時(shí)間再來跟大家討論。
出處:藍(lán)色理想
責(zé)任編輯:handmade
上一頁 下一頁 應(yīng)用例子:模擬游戲存盤
◎進(jìn)入論壇Flash專欄 版塊參加討論