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

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

歡迎您!
朋友圈

400-850-8622

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

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

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

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

  Flash MX在服務(wù)器/客戶的數(shù)據(jù)處理/存儲(chǔ)控制上下了一些功夫,其中簡(jiǎn)單而方便的loadVars對(duì)象我們?cè)诘诙炀涂吹搅似浞价櫍琗ML/XmlSocket對(duì)象還是老瓶裝舊藥,Cookie對(duì)象也不過(guò)是測(cè)試環(huán)境的犧牲品,倒是新的SharedObject對(duì)象LocalConnection對(duì)象讓我看到Flash MX更多的閃光點(diǎn),我們可以利用它們實(shí)現(xiàn)記錄網(wǎng)站訪問(wèn)歷史、用戶私人信息存儲(chǔ)、游戲暫存/數(shù)據(jù)緩存等很多應(yīng)用。

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

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

  SharedObject對(duì)象看起來(lái)更像是Cookie對(duì)象/MMSave方法和FScommand的Save的結(jié)合產(chǎn)物。在存儲(chǔ)用戶臨時(shí)數(shù)據(jù)時(shí)我們可能經(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("-------------------------------");
  }

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

  要點(diǎn):

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

  *顯示當(dāng)前值,如果和原值相同,則不會(huì)顯示new data saved,即沒(méi)存入硬盤(pán)。(圖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");

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

(圖2)

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

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

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

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

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

  存儲(chǔ)極限:

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

  System.showSettings(1);

  源文件下載:

  /tutorial/flash_mx/day10.exe
  

  Tips:

  System.showSettings()的用法:

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

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

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