Flashcom中远程共享对象SharedObject的用法

2008-04-02 10:50:12来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折


  学习fcs也有差不多一个月了,感觉最有特色的东西还是SharedObject.

  SharedObject有不少东西,本地操作就不说了(相信很多人没接触fcs也用过);就说说远程共享对象吧.

  基本的应用流程是:

  
my_nc=newNetConnection();

  my_nc.connect("rtmp:/app",变量1,变量2,...);

  mySO=getRemote("mySO",my_nc.uri,false)

  mySO.connect(my_nc);

  mySO.onSync=function(info){

  }

  mySO.data[property]=newValue

  //


  下面解析一下:

  
my_nc=newNetConnection();

  my_nc.connect("rtmp:/app",变量1,变量2,...);

  mySO=getRemote("mySO",my_nc.uri,false)

  //mySO:共享对象名字;

  //my_nc.uri:共享对象共享连接到my_nc.uri的用户;

  //false:还能够用true或空;英文解析是:

  //1.nullorfalse:persistencenotontheserver

  //2.true:persistenceontheserver(notonthelocal);

  //3.Afullorpartiallocalpathtothesharedobject

  //persistenceontheserverandlocal

  //我也不大清楚这个意思,但我总结:false:当任何用户都停掉

  //时mySO清空;true:不清空,

  mySO.connect(my_nc);

  //连接mySO到服务器

  mySO.onSync=function(info){

  }

  //mySO事件

  改变他的值(一旦改变他的值就会触发onSync事件):

  mySO.data[property]=newValue


  到这里就能够基本应用,当然假如您想在服务器也创建一个对应的mySO来也能够用

  application.mySO = SharedObject.get("mySO", false);

  但要注意的是在服务器里操作mySO的属性是要用setProperty来改变,或是把一个对象作为他的属性,那么操作对象就不用用setProperty了.

  //

  下面来重点说下mySO的事件:onSync

  SharedObject有两个事件:onStatus和onSync

  两个基本上是相同的,但是有一点(不知道是不是这点使得大家不用onStatus):onStatus对新值和旧值相同时是不会触发这个事件的,

  而onSync却不管是否相同都会触发;

  先看一个例子:

  
my_So.onSync=function(info){

  for(nameininfo){

  trace("[sync]ReadingArrayObject#" name "code(" info[name].code "," info[name].name ")");

  switch(info[name].code){

  case"change":

  varproperty=info[name].name;

  varnewValue=this.data[property];

  _root[property "_in"].text=newValue;

  break;

  case"success":

  break;

  case"reject":

  break;

  case"clear":

  break;

  case"delete":

  break;

  trace("dataisupdated");

  }

  }

  };


  操作:

  
mySO.data[mytxt]=50


  干脆就在上面注析吧:

  
my_So.onSync=function(info){

  //info:事件onSync触发的返回信息,是个一维数组,两个属性(code,name)

  for(nameininfo){

  //name:变化的属性名,这个是个遍历,看看在这次事件中有哪些属性改变了,(常常只有一个属性改变)

  trace("info[name].code:" info[name].code "info[name].name:" info[name].name);

  //输出info[name].code:相对于本客户端的事件类型:如下的switch;

  //输出info[name].name:属性名字

  switch(info[name].code){

  case"change":

  //当事件类型是"改变"时,基本就是在这里广播事件的,其他的每个客户都执行这里的语句

  var_property=info[name].name;

  var_newValue=this.data[_property];

  _root[_property].text=_newValue;

  break;

  case"success":

  //当事件类型是"成功"时:注意:当本客户端上改变触发自已是"成功";而其他客户端则是"改变";

  break;

  case"reject":

  //当事件类型是"修改不成功"时:

  break;

  case"clear":

  //这个用得比较少,不是很清楚,根据英语的意思自已也不是很理解:

  //ThisvalueisreceivedbyaFlashplayerthatconnectedtoaSharedObjectforthefirsttime.

  //Clearisalsosentiftheserverandclientdataaresofaroutofsyncthattheclientdumps

  itsversionoftheSharedObjectandresynchronizesitselfcompletely.

  break;

  case"delete":

  //当mySO给delete掉时

  break;

  trace("dataisupdated");

  }

  }

  }

  //


  说到my_SO不得不提的是my_SO.send()这个函数(我很喜欢用),他也是类似onSync的广播事件的用途.这个很好用.

  用法:

  
mySO.send("toggleBall",变量1,变量2...);

  对应在client或是server端的mySO属性函数:

  mySO.toggleBall=function(变量1,变量2..){

  这个函数在其他任何的客户端执行,就像onSync相同的效果

  }

  <!--/message-->


标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: 学习Flash组件应用MP3制作

下一篇: FLASH实现动态模糊效果