堕落天堂
面对现实,我们无力抗拒; 忠于理想,我们全力以赴

~只所以wo  k  a   o ,是因为换了很多个标题,都被网易给屏蔽了- -!只能无语了。。。

 

很久很久以前想做一个小游戏的排行榜。将分数存储在本地,很轻易得做到了。结果就是死都无法读取出来。

今天没事将代码又看了一遍,我靠。

就因为我一直在初始化程序里将记录分数的数组实例化了。一个实例化过的数组当然是空的,一个空的数组当然是无法读取出任何数据的。。。我k  a  o  。。。。

将代码发一下,给需要的朋友看看。

这个是存储的类,也是主类

package{
 import flash.net.SharedObject;
 import flash.events.NetStatusEvent;
 import flash.net.SharedObjectFlushStatus;
 import flash.system.Security;
 import flash.system.SecurityPanel;
 import flash.display.MovieClip;
 import flash.events.MouseEvent;
 
 public class Save extends MovieClip{
  
  private var example:SharedObject = SharedObject.getLocal("Test","/");//创建一个文件名为Test的文件
  private var myButton:MyButton = new MyButton();//read Button
  private var saveButton:SaveButton = new SaveButton();
  private var reBtn:removeBtn = new removeBtn();
  
  public function Save(){
   init();
  }
  
  private function init():void{
   addChild(myButton);
   myButton.x = 200;
   myButton.y = 300;
   myButton.addEventListener(MouseEvent.CLICK,showScore);
   addChild(saveButton);
   saveButton.x = 200;
   saveButton.y = 150;
   saveButton.addEventListener(MouseEvent.CLICK,saveData);
  }
  
  private function showScore(evt:MouseEvent):void{
   new Read();//实例化读取类
  }
  
  private function saveData(evt:MouseEvent):void{
   example.data.scoreAry.push(12);//将数据存在scoreAry数组里
   example.data.scoreAry.push(13);
   example.data.scoreAry.push(11);
   example.data.scoreAry.push(13);
   try{
    var flushResult:String = example.flush();
    if(flushResult == SharedObjectFlushStatus.PENDING){
     //检查用户是否同意以足够磁盘空间保存数据
     example.addEventListener(NetStatusEvent.NET_STATUS,onStatus);
    }else if(flushResult == SharedObjectFlushStatus.FLUSHED){
     //成功保存,保存后你想要执行的代码
     //code
     trace("success");
    }
   }catch(e:Error){
    //这个是如果有错误发生,弹出系统的panel,让用户自己设置
    Security.showSettings(SecurityPanel.LOCAL_STORAGE);
   }
  }
  
  private function onStatus(evt:NetStatusEvent):void{
   trace("ene");
   if(evt.info.code == "SharedObject.Flush.Success"){
    //用户同意将数据保存在本地
    trace("tongyi");
   }else if(evt.info.code == "SharedObject.Flush.Failed"){
    //用户不同意将数据保存在本地
    trace("bu");
   }else{
    trace(evt.info.code);
   }
  }
  
  private function remove():void{
   //最后移除监听器
   example.removeEventListener(NetStatusEvent.NET_STATUS,onStatus);
  }
 }
}

下面是读取的类。用来读取数组里的数据并且输出

package{
 import flash.net.SharedObject;
 import flash.display.MovieClip;
 
 public class Read extends MovieClip{
  
  private var exampleRead:SharedObject;
  private var example:SharedObject;
  private var out:int = 0;
  private var outAry:Array = new Array();
  
  public function Read(){
   init();
  }
  
  private function init():void{
   outAry = new Array();
   read();
  }
  
  private function read():void{
   exampleRead = SharedObject.getLocal("Test","/");

   for(var i:uint = 0;i < exampleRead.data.scoreAry.length;i++){
    out = exampleRead.data.scoreAry[i];
    outAry.push(out);
   }
   order();
  }
  
  private function order():void{//排序方法。冒泡法。
   for(var i:uint = 0;i < outAry.length;i++){
    for(var j:uint = 1;j < outAry.length - i;j++){
     if(outAry[j - 1] < outAry[j]){
      //两两交换
      outAry[j - 1] = outAry[j - 1] + outAry[j];
      outAry[j] = outAry[j - 1] - outAry[j];
      outAry[j - 1] = outAry[j - 1] - outAry[j];
     }
    }
   }
   showOutAry();
  }
  
  private function showOutAry():void{
   //输出最大的三个数
   for(var i:uint = 0;i < 3;i++){
    trace(outAry[i]);
   }
  }
 }
}

仅以此代码鞭策曾经抽住的脑子。。。

posted on 2009-08-20 17:23  鸿杰  阅读(199)  评论(0编辑  收藏  举报