學習fcs也有差不多一個月了,感覺最有特色的東西還是SharedObject.
今天就寫個基本的教程關于它,第一次寫教程(以前都是看教程-_-),手心都出汗了,心怕寫得有錯誤導讀者就慘了
,
斑竹有空看看,如果我的問題多就馬上刪掉,免得誤了大家.或是這在這里指出來
有問題的話在帖中大家討論,
SharedObject有不少東西,本地操作就不說了(相信很多人沒接觸fcs也用過);就說說遠程共享對象吧.
基本的應用流程是:
my_nc = new NetConnection();
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 = new NetConnection();
my_nc.connect("rtmp:/app",變量1,變量2,...);
mySO=getRemote("mySO",my_nc.uri,false)
// mySO:共享對象名字;
// my_nc.uri:共享對象共享連接到my_nc.uri的用戶;
// false:還可以用true或空;英文解析是:
// 1. null or false :persistence not on the server
// 2. true: persistence on the server (not on the local);
// 3. A full or partial local path to the shared object
// persistence on the server and local
// 我也不大清楚這個意思,但我總結: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 (name in info) {
trace("[sync] Reading Array Object #"+name+" code ("+info[name].code+","+info[name].name+")");
switch (info[name].code) {
case "change" :
var property = info[name].name;
var newValue = this.data[property];
_root[property+"_in"].text = newValue;
break;
case "success" :
break;
case "reject" :
break;
case "clear" :
break;
case "delete" :
break;
trace("data is updated");
}
}
};
操作:
mySO.data[mytxt]=50
//----------------------------------------------------------------------------------------------------------------------
干脆就在上面注析吧:
my_So.onSync = function(info) {
//info:事件onSync觸發的返回信息, 是個一維數組,兩個屬性(code,name)
for (name in info) {
//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" :
//這個用得比較少,不是很清楚,根據英語的意思自已也不是很理解:
//This value is received by a Flash player that connected to a SharedObject for the first time.
//Clear is also sent if the server and client data are so far out of sync that the client dumps
its version of the SharedObject and resynchronizes itself completely.
break;
case "delete" :
//當mySO給delete掉時
break;
trace("data is updated");
}
}
}
//----------------------------------------------------------------------------------------------------------------
說到my_SO不得不提的是my_SO.send()這個函數(我很喜歡用),它也是類似onSync的廣播事件的用途.這個很好用.
用法:
mySO.send("toggleBall", 變量1, 變量2...);
對應在client或是server端的mySO屬性函數:
mySO.toggleBall=function( 變量1, 變量2..){
這個函數在其它所有的客戶端執行,就像onSync一樣的效果
}
今天就寫個基本的教程關于它,第一次寫教程(以前都是看教程-_-),手心都出汗了,心怕寫得有錯誤導讀者就慘了

斑竹有空看看,如果我的問題多就馬上刪掉,免得誤了大家.或是這在這里指出來
有問題的話在帖中大家討論,
SharedObject有不少東西,本地操作就不說了(相信很多人沒接觸fcs也用過);就說說遠程共享對象吧.
基本的應用流程是:
my_nc = new NetConnection();
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 = new NetConnection();
my_nc.connect("rtmp:/app",變量1,變量2,...);
mySO=getRemote("mySO",my_nc.uri,false)
// mySO:共享對象名字;
// my_nc.uri:共享對象共享連接到my_nc.uri的用戶;
// false:還可以用true或空;英文解析是:
// 1. null or false :persistence not on the server
// 2. true: persistence on the server (not on the local);
// 3. A full or partial local path to the shared object
// persistence on the server and local
// 我也不大清楚這個意思,但我總結: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 (name in info) {
trace("[sync] Reading Array Object #"+name+" code ("+info[name].code+","+info[name].name+")");
switch (info[name].code) {
case "change" :
var property = info[name].name;
var newValue = this.data[property];
_root[property+"_in"].text = newValue;
break;
case "success" :
break;
case "reject" :
break;
case "clear" :
break;
case "delete" :
break;
trace("data is updated");
}
}
};
操作:
mySO.data[mytxt]=50
//----------------------------------------------------------------------------------------------------------------------
干脆就在上面注析吧:
my_So.onSync = function(info) {
//info:事件onSync觸發的返回信息, 是個一維數組,兩個屬性(code,name)
for (name in info) {
//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" :
//這個用得比較少,不是很清楚,根據英語的意思自已也不是很理解:
//This value is received by a Flash player that connected to a SharedObject for the first time.
//Clear is also sent if the server and client data are so far out of sync that the client dumps
its version of the SharedObject and resynchronizes itself completely.
break;
case "delete" :
//當mySO給delete掉時
break;
trace("data is updated");
}
}
}
//----------------------------------------------------------------------------------------------------------------
說到my_SO不得不提的是my_SO.send()這個函數(我很喜歡用),它也是類似onSync的廣播事件的用途.這個很好用.
用法:
mySO.send("toggleBall", 變量1, 變量2...);
對應在client或是server端的mySO屬性函數:
mySO.toggleBall=function( 變量1, 變量2..){
這個函數在其它所有的客戶端執行,就像onSync一樣的效果
}