×

FLASH 制作网络游戏基本知识介绍

Kalet Kalet 发表于2010-06-19 16:02:05 浏览226 评论0

抢沙发发表评论

随便写点东西吧

因为感觉人很少。。。

会的不会的都来讨论下吧,这里太冷清。。。

FLASH网络游戏主要解决的是和服务器的数据传输问题

主要用到XMLSocket类

 

 

sock=new XMLSocket();

sock.connect(ip,port);//服务器IP和端口

sock.send("");发送数据

sock.onConnect=function(success)

{

if(success)

{

trace("成功!");

}

else trace("失败");

}

sock.onData=function(data)

{

trace(data);

}

sock.onClose=function()

{

trace("断开连接!");

}

 

这样就可以实现基本的数据通信

比如

 

 

sock=new XMLSocket();

sock.connect(ip,port);//服务器IP和端口

_root.send_btn.onRelease=function(){

sock.send("test data!");

}

sock.onConnect=function(success)

{

if(success)

{

trace("成功!");

}

else trace("失败");

}

sock.onData=function(data)

{

trace(data);

}

sock.onClose=function()

{

trace("断开连接!");

}

如果连接成功将trace:test data

 

 

XMLSocket主要用于与服务端进行即时通信,目前的应用领域主要是Flash文本聊天和Flash在线游戏等方面。

    XMLSocket的优点:

    1、能和服务端即时通信;

    2、Flash Player 5.0以上的版本内置类,不需另装组件或插件;

    3、因为XMLSocket就是相当于一个Socket客户端,所以一般的中间件都支持的(如java,.Net等)

    XMLSocket的缺点:

    1、XMLSocket只能传字符串或xml格式的文本,数据类型单一;

    2、XMLSocket服务端自行开发的话,需要对Socket技术比较了解才行,好在网上有现成的服务端软件(商业的XMLSocket Server 有Unity、Fortress;开源的XMLSocket Server 有Oregano Multiuser Server);

    3、还有就是XMLSocket的80端口与flash安全策略问题。(网上有一个解决方法,不知是否可行,请自行验证)





//=======================================;

// Flash客户端(以Flash文本聊天为例);

//=======================================;

var paramObj:Object = new Object();

//命令分隔符;

paramObj.CommandDelimiters = "-@@##@@-";

//用户列表分隔符;

paramObj.PeopleDelimiters = "-@#@-";

//建立XMLSocket对象;

var socket:XMLSocket = new XMLSocket();

//连接状态事件;

socket.onConnect = function(success) {

trace("socket.onConnect:"+success);

if (!success) {

trace("服务器连接失败,请检查网络状态!");

}

};

//关闭事件;

socket.onClose = function() {

trace("服务端已关闭!");

logoutChat();

};

//数据通信事件;

socket.onData = function(src) {

//trace("socket.onData:"+src);

doCommand(getCmdArrayByMsg(trim(src)));

};

//用户登录;

function loginChat():Void {

//连接Socket服务端;

socket.connect(“localhost”, “8888”);

sendSocket("INFO"+paramObj.CommandDelimiters+msg);

}

//用户注销;

function logoutChat(b:Boolean):Void {

sendSocket("QUIT");

}

//显示聊天信息;

function showChat(msg:String):Void {

trace(“聊天信息:”+msg);

}

//发送聊天信息;

function sendChat(msg:String):Void{

sendSocket("MSG"+paramObj.CommandDelimiters+msg+paramObj.CommandDelimiters+msg);

}

//向服务端发送信息;

function sendSocket(msg:String):Void {

socket.send(msg+"\r");

}



//处理服务端返回信息;

function getCmdArrayByMsg(msg:String):Array {

if (msg.charCodeAt(0) == 13 && msg.charCodeAt(1) == 10) {

msg = msg.substr(2);

}

return msg.split(paramObj.CommandDelimiters);

}



function doCommand(arr:Array):Void {

switch (arr[0]) {

case "MSG" :

showChat(arr[1]);

break;

case "TAKEN" :

trace("你的登录名已经有了,请重新换一个登录名!");

break;

case "PEOPLE" :

doPeople(arr[1]);

break;

}

}

//显示在线用户列表;

function doPeople(msg:String):Void {

var people_arr:Array = msg.split(paramObj.PeopleDelimiters);

trace(people_arr);

}

群贤毕至

访客