AS3.0编程 So本地数据存储(“超级cookies”)--AS3:Local SharedObject

来源:互联网 发布:定制衣柜设计软件 编辑:程序博客网 时间:2024/05/16 11:50

Flash影片运行过程中,大多数的数据都存储于影片本身,一旦影片被关闭,这些数据也就从内存中被清除掉,下次运行时,数据将从头开始。若想存储数据或者让客户端的多个影片共享同一组数据,就要想办法把数据存储在Flash播放器之外。 
在ActionScript 3.0中,SharedObject类实现了在客户端机器中持久性存储数据。有两种类型的共享对象:本地和远程。本节主要介绍在本地储存数据。 

创建ShareObject对象

Flash的ShareObject对象一般简称为SO,类似于Web浏览器中的cookies。它们被一些开发者称为“超级cookies”,因为SO可以存储大量数据,且存储和读取的都是原生的ActionScript类型数据。 
ShareObject 对象默认的空间大小100KB,用户可以通过FlashPlayer'sSettingsManager控制的使用空间大小,来严格限制被使用的空间。存储在本地计算机的SO文件是一种二进制文件,扩展名为.sol。不同的SWF影片可以通过flash.net.SharedObject类进行读写.sol文件。 
创建的.sol文件被放置在Flash播放器对应的应用程序数据目录,以Windows为例,目录为:C:\Documents and Settings\Administrator\Application Data\Macromedia\Flash Player\#SharedObjects,在此主目录下使用随机字符命名目录,记录数据。 

向SO上写入数据

要实现添加数据到SO上,只需给SO对象的data属性添加属性值。共享对象SO有个内建的属性data,data属性类型为object,因而可以添加任何信息上去。如下面的示例代码所示。 
//存储username值给so共享对象 
so.data.username= "浪子啸天"; 
注意:既不能直接向SO共享对象赋值,也不能直接向SO共享对象的data属性赋值,这样的结果都是错误的。 
如下面的两行写入数据的方法都是错误的,错误代码如下所示。 
so.username="浪子啸天"; 
so.data="浪子啸天"; 

读取SO数据

要实现在客户端读取SO数据,原理很简单。因为这些持久性数据都保存在共享对象的data属性里,只需要访问Data对象的相关属性就Ok了。 
下面的示例实现读取SO中储存的数据,代码如下所示。 
var so:SharedObject=SharedObject.getLocal("test") 
//将数据写入so 
so.data.username="浪子啸天" 
so.data.sex="男" 
//写入数据 
so.flush() 
//读取so中的username 
var user=so.data.username 
trace(user)//输出:浪子啸天 
trace(so.data.sex)//输出:男 

删除保存的SO共享数据

要实现删除共享对象中的某个属性值或者删除整个共享对象,需要使用两种不同的方法:用delete删除共享对象的data属性中的值;使用clear()方法清除整个共享对象。 
下面的示例使用delete关键字删除SO共享对象的data对象中的sex属性,代码如下所示。 
var so:SharedObject=SharedObject.getLocal("test") 
//将数据写入so 
so.data.username="浪子啸天" 
so.data.sex="男" 
//写入数据 
so.flush() 
//删除so中的sex属性 
delete so.data.sex 
trace(so.data.sex)//输出:undefined,说明删除成功 
trace(so.data.username)//输出:浪子啸天

=================================================================
 在 AS3 里的Local SharedObject用法跟 AS2 是一样的。
SO存储在计算机的一个文件里面,跟Cookie很相似。路径是C:\Documents and Settings\用户名\Application Data\Macromedia\Flash Player\#SharedObjects\

基本用法:   


//定义一个SO 
    var mySO:SharedObject; 
    //获取本地的一个SO 
    mySO = SharedObject.getLocal("beniSO"); 
    //在SO里面存储数据 
    mySO.data.name = "Beni"; 
    mySO.data.sex = "sex"; 
    //获取SO里面的数据 
    trace ("name is: " + mySO.data.name); 
    trace ("sex is: " + mySO.data.sex);



注意:本地Flash存储设置不能为“无”,而且容量未满。
     


Local SharedObject使用起来有不少限制,所以都是用来记录一些不大重要的信息。例如登陆时的用户名之类的。
现在不少Flash游戏有存档,绝大不分也是用这个SO。


AS3 游戏存档


我不知道大多数的Flash游戏是不是有本地存档,但是我的游戏确实碰到了
在这里向各位高手请教一下,AS3中如何读写本地文件,我知道Air中有flash.filesystem这个包
但是在 Flash Player 中(在浏览器中运行的 SWF 文件中)未公开这些属性和方法
有高手能给点思路吗?


在网页中的flash游戏,如果需要用到本地存储,有两种方式考虑:
1、Cookie相关的。平常网页相关的存储都可以使用,通过flash调用页面js实现。
2、SharedObject。这是flash自带的存储功能,默认大小为100k。


SharedObject对象的使用方法不详细介绍,类的方法属性可以参考:http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/net/SharedObject.html
例子:


  
try {
    var so:SharedObject = SharedObject.getLocal("flash_cookie", "/");
    so.data["test"] = true;
    trace(so.data["test"]);
}catch (e:Error) { }

0 0
原创粉丝点击