fms实现聊天有很多种办法,主要用到SharedObject,今天就讲一下SharedObject实现聊天的方法:
SharedObject最奇妙的地方就在于,只要它发生了变化,那么所有连接到它的客户端都会收到消息,做出反应,这个动作必须在客户端的onSync里面来完成。
方法1、通过给SharedObject 赋值:
到applications 目录新建一个文件夹为chat,不需要写main.asc
在场景上放置两个文本框,一个是输入文本、动态文本、以及一个按钮
分别命名为:input_txt output_txt chat_btn 自己摆放位置。
//code begin
//code begin
var nc:NetConnection = new NetConnection()
nc.onStatus = function(info){
trace(info.code)
}
nc.connect("rtmp:/chat","lulu");
var chat_so:SharedObject =SharedObject.getRemote("chat", nc.uri, false);
//监测函数
chat_so.onSync = function(){
//只要发生变化,就读取data并在output_txt 现实
if(this.data.text == undefined){
this.data.text = "";
}else{
_root.output_txt.text = this.data.text;
}
}
chat_so.connect(nc)
chat_btn.onRelease = function(){
_root.chat_so.data.text += _root.input_txt.text+"/n";
_root.input_txt.text = "";
}
//code end
ctrl + enter 试试吧。。
如果把红色的false,改为true,下一次连接到服务器可以看到之前的聊天记录,试试吧。。
ps:客户端如果想在so里面写入属性一定要chat_so.data的方式才能往里面赋值。这里的data就等同于服务器端的chat_so.
范例就是通过往里面写入属性text来实现保存聊天记录的。
困了,下一种方法明晚再写。。。踢会足球先。。不是游戏哦
教程4所用的方法是在sharedobject里面写入属性,发生改变后,然后所有客户端同步从而实现文字聊天的。
这一讲我说一种更加简单的实现办法:利用sharedobject.send来实现。
同样在applications目录下建立一个文件夹chat,不需要写创建main.asc
在场景上放置两个文本框,一个是输入文本、动态文本、以及一个按钮
分别命名为:input_txt output_txt chat_btn 自己摆放位置。
//code begin
var nc:NetConnection = new NetConnection()
nc.onStatus = function(info){
trace(info.code)
}
nc.connect("rtmp:/chat","lulu");
var chat_so:SharedObject =SharedObject.getRemote("chat", nc.uri, false);
//不需要onSync 函数了,因为chat_so的data不会发生改变了
chat_so.connect(nc)
chat_so.showChat = function(txt:String){
_root.output_txt.text += txt+"/n";
}
chat_btn.onRelease = function(){
//这里用到了send方法,注意这里的showChat就是上面定义的showChat函数,后面的是传递的参数,可传递多个参数。
_root.chat_so.send("showChat", _root.input_txt.text);
_root.input_txt.text = "";
}
//code end
ctrl + enter 。。。。。
这种方法和第一讲的方法的主要区别在哪里呢?
1、第一种方法可以记录聊天信息,第二种不可以
2、第一种方法的通讯量比较大,每次都要将全部信息读到本地,第二种则很小
3、第二种更加灵活,用户可以删除自己的聊天区域的记录,如果是第一种办法,则只能由有管理权限的人来删除so.data,所有的用户端就看不到信息了,因为此时的so.data.text = "";
踢球了。。
明天讲一下netstream的主要用法,以及时下比较流行的视频点播、直播。
附上源文件
200706052111551816.fla