博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ShareObject 数据存储
阅读量:4563 次
发布时间:2019-06-08

本文共 9304 字,大约阅读时间需要 31 分钟。

ShareObject,顾名思义共享对象,而通常意义上的共享,从B/S结构上来讲,无非是客户端(浏览器端)的共享和服务器端的共享了,不错,ShareObject刚好份演了这两种角色。而且ShareObject也是按此进行了两种分类,一类是LSO——Local Share Object(本地共享对象)其实类似于cookie,而另一种RSO——Remote Share Object(远程共享对象) 我感觉比较类似于JSP中的Application对象,但好象比Application更强大一:LSO(本地共享对象)LSO的用法比较简单,和我们平常操作Cookie大同小异:1.得到一个共享对象:var so:SharedObject=SharedObject.getLocal("mydata","/");2.往共享对象里存入值:var user:Object=new Object();user.userName=userName.text;user.passWord=passWord.text;user.isSaveLogin=(remember.selected==true?1:0);so.data.user=user;3.清除共享对象里的值:var so:SharedObject=SharedObject.getLocal("mydata","/");if(so.data.user!=null){so.data.user=null;}4.读取共享对象里的值:var so:SharedObject=SharedObject.getLocal("mydata","/");if(so.data.user!=null){userName.text=so.data.user.userName;passWord.text=so.data.user.passWord;if(so.data.user.isSaveLogin.toString()=="1"){remember.selected=true;}二:RSO(远程共享对象):RSO是服务器端的共享对象,服务器端的数据共享可以实现多个客户端数据共享,在这里服务器我采用Flash Media Server3,FMS的使用非常简便,你只要在安装目录下找到Applications目录,并在其下新建一个子目录就可以成为你的工程或项目了。关于FMS的使用大家可以参考相关文章,本文不做介绍:利用FMS和RSO我们可以实现非常多的功能,诸如,聊天室,联机游戏,视频会议,在线视频录制和视频聊天。。。。。。 public function init ():void    {    rtmpGo = "rtmp://localhost/basicSO";//这里设置FMS服务器的连接地址,basicSO即为,//FMS安装目录下Applications下自己手动新建的一个文件夹名称,也是FMS的工程名,就是这么简洁,不可意议nc = new NetConnection( );//产生一个连接对象nc.connect (rtmpGo);//连接到上面的地址nc.addEventListener (NetStatusEvent.NET_STATUS,doSO);//加入连接的监听事件,以便根据连接返回的状态做相应处理}private function doSO (e:NetStatusEvent):void{good=e.info.code == "NetConnection.Connect.Success";//判断是否为连接成功状态//连接返回的状态有好几种,大家可以参看FMS的文档,很详尽if (good)//如果连接成轼,执行如下操作{text_so=SharedObject.getRemote("test",nc.uri,false);//得到远程共享对象,false属性是设置共享的数据为非持久化的,//即重启服务器后,先前的数据不会保存text_so.connect (nc);text_so.addEventListener (SyncEvent.SYNC,checkSO);//为共享对象添加异步事件,这也是服务器同步处理多客户端最关键的地方,//一个客户端进行了什么操作,其它客户端也会有相应的变化,就是通过此事件来完成的}}private function sendMsg (e:MouseEvent):void{text_so.setProperty ("msg",textInput.text);//将新的信息存入共享对象textArea.htmlText+=text_so.data.msg + "\n";//更新客户端的信息列表}private function checkSO (e:SyncEvent):void{for (var chng:uint; chng{switch (e.changeList[chng].code){case "clear" :break;case "success" :trace (text_so.data.msg);break;case "change" ://一个客户端改变数据会更新所有客户端textArea.htmlText+=text_so.data.msg + "\n";break;}}}1.首先,先在场景中建立一个动态文字框,并命名为msg_txt,以及三个按钮,别分为open_bt、close_bt、clear_bt等。  2.在影格1输入下方的语法。  var mwtSObj:SharedObject;  function obj() {  mwtSObj = SharedObject.getLocal("mSObj");  var msg=mwtSObj.data.NOWmode;  if (msg !=null) {  msg_txt.text=msg;  } else {  msg_txt.text="";  }  }  obj();  open_bt.addEventListener(MouseEvent.CLICK,openObj);  close_bt.addEventListener(MouseEvent.CLICK,closeObj);  clear_bt.addEventListener(MouseEvent.CLICK,clearObj);  function openObj(e:MouseEvent) {  mwtSObj.data.NOWmode="开";  obj();  }  function closeObj(e:MouseEvent) {  mwtSObj.data.NOWmode="关";  obj();  }  function clearObj(e:MouseEvent) {  mwtSObj.data.NOWmode="";  obj();}package{        import flash.display.Sprite;        import flash.events.NetStatusEvent;        import flash.net.SharedObject;        import flash.net.SharedObjectFlushStatus;                public class ShareTest extends Sprite {                                                public  var  socre:int = 100;  // 这个是你的得分                 private var mySo:SharedObject;                                public function ShareTest() {                        readValue();                }                public function readValue():void                {                        mySo = SharedObject.getLocal("application-name");                        trace("SharedObject 读取...\n");                        trace("读取结果为 : " + mySo.data.savedValue + "\n\n");                                                if(socre > mySo.data.savedValue || mySo.data.savedValue == undefined)                        {                                 saveValue(socre);                        }                                }                public function saveValue(_value:int):void {                        trace("存储中...\n");                        mySo.data.savedValue = _value;                                                var flushStatus:String = null;                        try {                                flushStatus = mySo.flush(10000);                        } catch (error:Error) {                                trace("存储失败");                        }                        if (flushStatus != null) {                                switch (flushStatus) {                                        case SharedObjectFlushStatus.PENDING:                                                trace("存储量超标了...\n");                                                mySo.addEventListener(NetStatusEvent.NET_STATUS, onFlushStatus);                                                break;                                        case SharedObjectFlushStatus.FLUSHED:                                                trace("分数成功刷新到磁盘\n");                                                break;                                }                        }                        trace("\n");                }                //清空存储                public function clearValue():void {                        delete mySo.data.savedValue;                }                                public function onFlushStatus(event:NetStatusEvent):void {                        switch (event.info.code) {                                case "SharedObject.Flush.Success":                                        trace("用户授予权限——值保存.\n");                                        break;                                case "SharedObject.Flush.Failed":                                        trace("用户拒绝——价值未保存.\n");                                        break;                        }                        trace("\n");                                                mySo.removeEventListener(NetStatusEvent.NET_STATUS, onFlushStatus);                }                        }}public static var mySo:SharedObject;                /**                 * 把数据保存到本地                 * @param dataName 要保存的对象名称                 * @param data 要保存的数据                 * @param name 参数共享对象名,返回共享对象的参照                 * @return                 *                 */                               public static function saveData(dataName:String,data:Object,name:String="localhostObj"):void                {                        mySo = SharedObject.getLocal(name,"/");                        mySo.data[dataName] = data;                        //强制保存数据,flush可带时间参数,默认为0                        mySo.flush();                }                /**                 * 读取本地数据,如果没有该数据,返回null值                 * @param dataName 数据的名称                 * @param name 参数共享对象名,返回共享对象的参照                 * @return                 *                 */                               public static function getData(dataName:String,name:String="localhostObj"):Object                {                        mySo = SharedObject.getLocal(name,"/");                        if(mySo.data[dataName] != null)                        {                                return mySo.data[dataName];                        }                        return null;                }var mySO:SharedObject = SharedObject.getLocal("republicofcode");logo_mc.x = mySO.data.my_x;logo_mc.y = mySO.data.my_y;if (!mySO.data.my_y) {logo_mc.x = 150;logo_mc.y = 100;}logo_mc.addEventListener (MouseEvent.MOUSE_DOWN, onDown);function onDown (e:MouseEvent):void {var my_mc = e.target;my_mc.startDrag ();}logo_mc.addEventListener (MouseEvent.MOUSE_UP, onUP);function onUP (e:MouseEvent):void {logo_mc.stopDrag ();mySO.data.my_x = logo_mc.x;mySO.data.my_y = logo_mc.y;mySO.flush ();}logo_mc.buttonMode=true;就是flash的配色游戏,点一个元件这个元件是个颜色,然后再点衣服,衣服就染成那个颜色(已实现),现在想点保存按钮,把配色保存下来,然后再打开swf后点读取可以把上一次配色显示出来。部分代码:var game:MovieClip=null;var w:int=0;var mc:MovieClip;var color:uint;var so:SharedObject;if(!so){     so=SharedObject.getLocal("game","/")//这里的game你可以取其他合法的名字}function InitLevel(m:MovieClip):void{    for(var i:int = 1;i<=20;i++)    {                mc = m.getChildByName("a"+i);        if(mc!=null)        {            mc.addEventListener(MouseEvent.CLICK,onPaint);        }    }}//a1,a2,...是那些衣服裤子的元件。function onPeekColor(e:MouseEvent):void{        switch (e.currentTarget)    {        case btnColor1 :            color = 0xffffff;            break;        case btnColor2 :            color = 0x37AA00;            break;        case btnColor3 :            color = 0xFFD326;            break;        case btnColor4 :            color = 0x3366FF;            break;        case btnColor5 :            color = 0xFF9900;            break;        case btnColor6 :            color = 0xA852DC;            break;        case btnColor7 :            color = 0xCC0000;            break;        case btnColor8 :            color = 0xFF6ACF;            break;        case btnColor9 :            color = 0x8A5F0D;            break;        case btnColor10 :            color = 0x000000;            break;    }        var ct:ColorTransform = new ColorTransform();    ct.color=color;        so.data.mycolor=ct.color;    xiguan.yanliao.transform.colorTransform=ct;}function onPaint(e:MouseEvent):void{    var mc:MovieClip = e.currentTarget;    mc.transform.colorTransform=xiguan.yanliao.transform.colorTransform;}

 

转载于:https://www.cnblogs.com/hotmanapp/p/6044162.html

你可能感兴趣的文章
Pycharm中配置Git版本管理
查看>>
手机app测试之我见
查看>>
Fiddler实现移动端手机抓包
查看>>
wps直接打开CVS文件会把长串数字订单号最后4位变为0
查看>>
BPM配置故事之案例8-根据表单数据调整审批线路
查看>>
LeetCode OJ 3Sum 3个整数之和
查看>>
Knockout应用开发指南 第八章:简单应用举例(2)
查看>>
Bootstrap WPF Style,Bootstrap风格的WPF样式
查看>>
Stern-Brocot Tree [HDU 4556]
查看>>
103 Binary Tree Zigzag Level Order Traversal 二叉树的锯齿形层次遍历
查看>>
springboot项目中使用maven resources
查看>>
ubuntu12.04 卸载和安装mysql
查看>>
转:phpStudy for Linux (lnmp+lamp一键安装包)
查看>>
记录项目从无到有
查看>>
博客园文章编辑器【客户端应用程序】V2.0.0发布,命名为51cnblogs
查看>>
C# WPF获取任务栏时间区域的Rectangle
查看>>
DIV+CSS:如何编写代码才能更有效率
查看>>
利用Idea查看类的继承关系图
查看>>
跨进程访问共享内存的权限问题
查看>>
AD管理中心
查看>>