学习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-->