天才教育網(wǎng)合作機構(gòu) > 設(shè)計軟件培訓(xùn)機構(gòu) > Flash培訓(xùn)機構(gòu) >

東莞設(shè)計培訓(xùn)網(wǎng)

歡迎您!
朋友圈

400-850-8622

全國統(tǒng)一學(xué)習(xí)專線 9:00-21:00

位置:設(shè)計軟件培訓(xùn)資訊 > Flash培訓(xùn)資訊 > 體驗Flash MX(10):服務(wù)器/客戶數(shù)據(jù)存儲控制

體驗Flash MX(10):服務(wù)器/客戶數(shù)據(jù)存儲控制

日期:2005-12-24 00:00:00     瀏覽:251    來源:東莞設(shè)計培訓(xùn)網(wǎng)

  Flash MX在服務(wù)器/客戶的數(shù)據(jù)處理/存儲控制上下了一些功夫,其中簡單而方便的loadVars對象我們在第二天就看到了其芳蹤,XML/XmlSocket對象還是老瓶裝舊藥,Cookie對象也不過是測試環(huán)境的犧牲品,倒是新的SharedObject對象LocalConnection對象讓我看到Flash MX更多的閃光點,我們可以利用它們實現(xiàn)記錄網(wǎng)站訪問歷史、用戶私人信息存儲、游戲暫存/數(shù)據(jù)緩存等很多應(yīng)用。

  通常,我們在Flash 5中會有幾種方法來存儲我們用過的數(shù)據(jù):如果在無Server的狀態(tài),我們可能用到FScommand+exec+EXE或者FScommand+Save+XML,適用于單機游戲和存放“Cookie”;如果有Server,則需要Loadvar/XML or XmlSocket Send連接服務(wù)器端程序?qū)懭敕?wù)器數(shù)據(jù)庫保存,但在網(wǎng)絡(luò)條件惡劣或者安全措施嚴(yán)謹(jǐn)?shù)那闆r下,這樣的方法可能造成重要數(shù)據(jù)的無法寫入;而Flash MX的SharedObject則可以減緩服務(wù)器存儲速度并有效解決此類問題。

  mySO=new SharedObject(); //make a new SharedObject

  SharedObject對象看起來更像是Cookie對象/MMSave方法和FScommand的Save的結(jié)合產(chǎn)物。在存儲用戶臨時數(shù)據(jù)時我們可能經(jīng)常使用到它,例如:

  //main 1

  i=10
  while(--i){
    var saveme=random(4);   //change text here
    var tmpData=SharedObject.getLocal("testMod");
    if (tmpData.data.data==undefined || tmpData.data.data!=saveme){
      trace("new data saved"+eval(tmpData.data.data=saveme));   //display & save
      tmpData.flush(); //refresh data
    }
    trace(tmpData.data.data);   //display result
    trace("-------------------------------");
  }

  這個例子清楚地說明SharedObject的臨時數(shù)據(jù)存儲功能。首先,隨機產(chǎn)生0-3的隨機數(shù)作為待存數(shù)據(jù),然后通過SharedObject的getLocal方法讀取硬盤中文件為testMod.sol中的數(shù)據(jù),判斷內(nèi)容里面名稱為data的子值是否和待存數(shù)據(jù)相同或者根本無數(shù)據(jù),條件成立則刷新存儲構(gòu)造數(shù)據(jù)data的data值并顯示結(jié)果(“new data saved”)。

  要點:

  先覆蓋原值,然后flush()一次(恰如其名——沖廁所)。

  *顯示當(dāng)前值,如果和原值相同,則不會顯示new data saved,即沒存入硬盤。(圖1)

(圖1)

  應(yīng)用:

  //prepare functions

  soLoad=function(src){
    return SharedObject.getLocal(src);
  }
  soSave=function(src,sdata){
    var tmpData= SharedObject.getLocal(src);
    for (var i in sdata)
      tmpData.data[i]=sdata[i];
    trace(tmpData.getSize());
    return tmpData.flush();
  }

  //from Demon.S function lib SharedObject.localDeleteAll

  SharedObject.prototype.localDeleteAll=function(){
    for(var i in this.data)
      delete this.data[i];
  return this.flush();
  }

  //main 2

  //init

  var mySo="testMod";
  var aryData={aritcle:"Flashmx new lighting world day10",author:"Demon.S",date:"4/8/2002",from:"DnVsystem",url:""}

  //remote (src);
  //local local data

  var tempSO=SharedObject.getLocal(mySo);
  trace("clearing....garbage:" + (tempSO.LocalDeleteAll() ? "cleaned" : "fail in clearning local data"));

  //load & save

  if (soSave(mySo,aryData) && aryData){
    var mainData=soLoad(mySo);
    if (mainData) for(var i in mainData.data) trace(i+":"+mainData.data[i]);
    else trace("Fail in save ");
  }
  else trace("No Data");

  這個例子基本上覆蓋了SharedObject的本地應(yīng)用的全部常用用法,程序開始的時候我假設(shè)不需要上次的記錄,所以我要清除那些東西,所以使用了localDeleteAll()(from Demon.S function lib)方法來清空我要寫的文件;接著判斷一些必要的糾錯,并把已經(jīng)準(zhǔn)備好的數(shù)據(jù)Object對象aryData用自定義的soSave寫入目標(biāo)mySo。

(圖2)

  這樣我們就實現(xiàn)了一個簡單過程,其中g(shù)etSize方法可以獲取sharedObject的文件大小,在Flash MX的默認(rèn)是100k,但這個可以由用戶自定義,甚至無限大。

  通過這個例子,我們可以把這樣的過程利用到網(wǎng)站訪問歷史、用戶私人信息存儲、游戲暫存/數(shù)據(jù)緩存等很多應(yīng)用。

  存儲結(jié)構(gòu):

  就好像MX的公用Include路經(jīng)一樣,SharedObject的存儲路經(jīng)也很十分的規(guī)矩:主根目錄在Application DataMacromediaFlash Player內(nèi),存放本機數(shù)據(jù)的數(shù)據(jù)都會在localhost目錄中出現(xiàn),其他網(wǎng)站的數(shù)據(jù)都會在根目錄以域名格式的文件夾出現(xiàn),例如上面我們的例子,我在桌面上做的文件就會放在:localhostDocuments and Settingsdemon.UDSDesktopday10.swf。

  存儲格式不是很復(fù)雜,提取的時候按照特定的規(guī)定簡單的Split截取文件字符并打散成Object,而且數(shù)據(jù)雖然沒有加密,但這樣可以加快提取速度。

  存儲極限:

  在Flash MX中引入的Settings面板有效的解決了部分安全問題,可由用戶自己控制Camera和Microphone并可控制SharedObject的大小,方法:

  System.showSettings(1);

  源文件下載:

  /tutorial/flash_mx/day10.exe
  

  Tips:

  System.showSettings()的用法:

  System.showSettings(0) //顯示Microphone/Camera允許控制;
  System.showSettings(1) //顯示SharedObject存儲限制;
  System.showSettings(2) //顯示Microphone控制;
  System.showSettings(3) //顯示Camera控制。

       若超出0-3范圍時,例如負(fù)數(shù)和大于3的數(shù)則會Return錯誤,并保持上次showSettings()的狀態(tài)。

如果本頁不是您要找的課程,您也可以百度查找一下: