本类共有 4110 篇文章,今日更新 0

Flash MX 编程深层次应用-网络连线游戏(3)

[ 来源:http://www.91now.com/down/ | 作者: | 时间:2007-5-21 21:45:57 | 浏览: 人次 ]

7.2 游戏区(2)

    

下面是对应的SIT部分的代码:

if(cmd.equals(this.cmd_SIT)) {

    if(param != null) {

        param = param.trim();

        if( param.indexOf(" ") != -1) {

            String desk_name = param.substring(0, param.indexOf(" "));

            param = param.substring(param.indexOf(" "));

            param = param.trim();

            String chessman_status = param.substring(0,param.indexOf(" "));

            String  player_name = param.substring(param.indexOf(" "));

            player_name = player_name.trim();

            chessman_status = chessman_status.trim();

            user.deskname = desk_name;

           

          user.place = chessman_status;

            if (chessman_status.equals("stand_up")) {

               user.deskname = null;

               user.place = null;

               user.play_status = null;

            }

       // 由于是广播,所以自己也会收到一个坐下的命令,所以自己就不发给自己了

            user.manager.notifyAll(packMsg(this.m_SIT, desk_name+":" + chessman_status + ":" + player_name,"" ));

        }

    }

}

发一条信息,是如何收到,然后如何动作的呢?请看下面的部分代码:

function on_Receive(x) {

    if (x == null) {

             return;

    }

    var e = x.firstChild;

             

    if (e == null) {

             return;

    } else if (e.nodeName == "SIT") {

             trace("----sit----");

             _root.sit_down(e.attributes.Value);

    }

……

这里的on_Receive程序就是前面说到的接收信息的主处理程序。很明显,这个在收到<SIT VALUE="6:stand_up:dongua" />串后,就会把它分解成一个结构型的内容,节点名就叫:SIT,其属性值e.attributes.Value等于"6:stand_up:dongua",请看这里调用的坐下的子程序:

function sit_down(str) {

    var place = 0, pre, now;

    var player = new Array(3);

   //把这个字符串分成三个部分

    player = str.split(":");

   //如果是自己收到自己坐下的信息就不做任何处理

    if (player != _root.nickname) {

             set_sit(player);

             

             // 如果自己坐在他的对面就开始游戏,定为左边先走

       if (player == "left" && _root.player_right[player[0]] == _root.nickname) {

                      // 表示自己坐在右边,拿蓝棋,后走

                      _root.i_run = false;

                      _root.my_logo = _root.Second_play;

                      _root.your_logo = _root.First_play;

                      _root.rival = player;

                      _root.now_play_table = Number(player[0]);

           //进入开始下棋的阶段

                      _root.init_play();

                      _root.gotoAndPlay("begin_play");

             

             }

      if (player == "right" && _root.player_left[player[0]] == _root.nickname) {

                      // 表示自己坐在左边,拿红棋,先走

                      _root.i_run = true;

                      _root.my_logo = _root.First_play;

                      _root.your_logo = _root.Second_play;

                      _root.rival = player;

                      _root.now_play_table = Number(player[0]);

            //进入开始下棋的阶段

                      _root.init_play();

                      _root.gotoAndPlay("begin_play");

             

             }

    }

}

function set_sit(arr) {

    if (arr[0] != "null") {

             var place = Number(arr[0]);

             var obj_place = place-_root.objTableDisplay.table_begin+1;

       //如果起立就清空对应棋盘对应位置的名字

             if (arr == "stand_up") {

                      if (_root.player_left[place] == arr) {

                                _root.objTableDisplay["Table_"+obj_place].player_left = "";

                                _root.player_left[place] = "";

                      } else {

             

                                _root.objTableDisplay["Table_"+obj_place].player_right = "";

                                _root.player_right[place] = "";

                      }

             }

       //如果坐左边就修改对应棋盘左边的内容

             if (arr == "left") {

                      _root.objTableDisplay["Table_"+obj_place].player_left = arr;

                      _root.player_left[place] = arr;

             }

       //如果坐右边就修改对应棋盘右边的内容

             if (arr == "right") {

                      _root.objTableDisplay["Table_"+obj_place].player_right = arr;

             

                      _root.player_right[place] = arr;

             }

    }

}

你是不是有点看晕了?没有办法,编程序就是这样,一定要弄清楚哪些是代码,哪些是代码,这两种代码看上去很相像。或者你会问为什么要一会用代码一会用代码,笔者认为只有这样讲读者才会弄明白游戏到底是如何运行的。如果分开讲的话,可能会更加糊涂!好了,言归正传,下面就来说明上面的代码吧。

上面的代码是游戏坐下的程序,sit_down程序的核心分成下面几个部分:

Ö           如果收到的是我坐下的信息就不做任何处理。
Ö           如果我不是坐在刚才这个人的对面,那么仅仅需要显示刚才这个人的位置与名字,并做相应的坐下或者起立的操作。
Ö           这里留下一个伏笔,就是在开始下棋的时候要先初始化一下,然后跳转到begin_play帧,也就是下面的这两条语句,这个内容会在后面讲到。

             

_root.init_play();

_root.gotoAndPlay("begin_play");

           

广告位