XMLSocket 二

1.XMLSocket的方法:

①.联机:connect(服务器地址,端口号)
示例:mySocket.connect("127.0.0.1",1024);

②.传送信息:send(信息内容)
示例:mySocket.send("<位置 name="ship3" x="20" y="60">" wink.gif;

③.关闭和远程计算机之间的联结:close()
示例:mySocket.close();

2.XMLSocket的事件:

①.onConnect(联机结果)
当connect()联机方法执行完毕后,它会触发并且传入一个代表联机是否成功的参数给onConnect()事件,如果联机成功,其值将是true。

②.onXML()
当XMLSocket接收到远程计算机传入的xml资料时,就会触发onXML()事件。

③.onData()
当XMLSocket接收到远程计算机传入的资料时,就会出发onData()事件。它和onXML()事件的不同之处在于从onData()事件取得的资料是尚未经过flash解析的原始字符串,而从onXML()事件取得的是经过解析后的XML资料。因为不同XMLSocket对象之间的往来信息都是XML格式,因此onXML()事件比较常用。

④.onClose()
当联机中断时,这个事件会被触发。

 flash中的设计

  在这个游戏中,flash从server端接收到的信息有3种:

①第一种是联线成功后,从server端返回一个编号,可以保证每个联机的用户都拥有不同的id,比如:如果我们接收到的编号是3的话,我们就将我们发送个server端的信息中的name属性设为ship3。

②第二种是从server端接收到的其它飞船的位置信息,这将是我们在整个游戏的过程中接收到的主要信息。

③第三种是如果联线人数已满,返回的错误信息。

  而flash传给server端的信息只有一种,那就是自己的位置信息,服务器端要做的事情就是接收这个位置信息后,马上转发给其他联机者。

  总的说来,flash中的流程如下:

1.向服务器端发送联线请求

2.如果联线成功,等待从服务器返回的信息,如果为“<id>3</id>”之类,则跳到游戏场景那一帧,如果返回的信息为“<err>full</err>”,说明联机的人数已满,跳到第三帧,告知游戏者游戏人数已满。

3.在游戏中,不断将自己的位置信息以“<位置 name='ship3' x='20' y='60' rotate='40'/>”这样的格式发送到服务器,并从服务器端接受其他船的位置信息,并在场景中用attachMovie复制出一个船,并调整其位置和角度。

 flash中的实现

1.将上次讲的游戏代码的所有内容从第一帧移到第二帧,因为我们要在第一帧完成联机和一些其他的初始化工作,添加第三帧,用来显示联机人满的消息。

2.第一帧的代码:

//声明XMLSocket对象

var mySocket=new XMLSocket();

//连接服务器

mySocket.connect("127.0.0.1",1024);
mySocket.onConnect=function(sucess){
    if(success){
        trace("连接成功" wink.gif;
    }else{
        trace("连接失败" wink.gif;
    }
}
mySocket.onXML=function(xmlDoc){

//如果返回的是编号信息

    if(xmlDoc.firstChild.nodeName="id" wink.gif{
         gotoAndStop(2);
         _root.myName="ship"+xmlDoc.firstChild.firstChild.nodeValue;
         mySocket.onXML=playGame;
    }

//如果返回的是人满的信息

    if(xmlDoc.firstChild.nodeName="err" wink.gif{
        gotoAndStop(3);
        mySocket.close();
    }
}

//定义函数playGame();

function playGame(xmlDox){
    _root.ortherName=xmlDoc.firstChild.attributes.name;
    _root.ortherx=xmlDoc.firstChild.attributes.x;
    _root.orthery=xmlDoc.firstChild.attributes.y;
    _root.ortherrotate=xmlDoc.firstChild.attributes.rotate;
    if(_root.ortherName<>_root.myName){
        attachMovie("othership",_root.otherName,1);
        _root[_root.otherName]._x=_root.ortherx;
        _root[_root.otherName]._y=_root.orthery;
        _root[_root.otherName]._rotate=_root.ortherrotate;
    }
}
  记住,一定要将库中的ship复制为一个othership,并将其中的代码去掉,并linkage为othership,这是因为其他的飞船我们能看到它和他们位置的改变,但是不能通过鼠标直接控制,所以里面的代码并不需要。

3.第二帧的代码:

//这里主要是实现向服务器发送自己的位置,把它

//放在control这个mc的enterFrame事件里面:

on(enterFrame){

//……//以前的代码

    var msg="<位置 name='"+_root.myName+"' x='"+_root.ship._x+"' 
    y='"+_root.ship._y+"' rotate='"+_root.ship._rotate+"'/>";
    if(mySocket&&mySocket.connected){
        mySocket.send(msg);
    }
}  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值