学院首页>图形图像>FLASH>Flash MX 编程深层次应用-网络连线游戏(3)

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

作者: 来源: 添加时间:2006-5-23 7:26:06
7.2 游戏区(2)

 

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

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,"" ));

}

}

}

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

function onXML_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);

}

……

这里的onXML_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[2] != _root.nickname) {

set_sit(player);

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

   if (player[1] == "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[2];

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

//进入开始下棋的阶段

_root.init_play();

_root.gotoAndPlay("begin_play");

}

if (player[1] == "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[2];

_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[1] == "stand_up") {

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

_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[1] == "left") {

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

_root.player_left[place] = arr[2];

}

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

if (arr[1] == "right") {

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

_root.player_right[place] = arr[2];

}

}

}

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

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

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

_root.init_play();

_root.gotoAndPlay("begin_play");

站内搜索