Flash MX 编程深层次应用-Flash射击游戏(7)
作者: 来源: 添加时间:2006-5-23 7:25:596.3.1 游戏积分排行榜
一个完整的游戏都有一个排行榜,本游戏也不例外。排行榜的内容实际上就是将玩家的得分及姓名等相应内容向后台程序发送,然后由后台程序进行处理,再将处理完的结果返回Flash中。下面先看看游戏的前台部分,如图6-22所示。

图6-22
Ö 第1帧:取得积分榜
程序如下:
_root.input_name._visible = false;
_root.now_over._visible = true;
stopDrag();
Mouse.show();
stopAllSounds();
//这里的url设为本地的,可以根据需要改正真实的值
url = "/";
_root.now_url = url+"./score.asp?buf="+getTimer();
_root.reply_time = 15;
dongua_load_var = new LoadVars();
dongua_load_var.sendAndLoad(_root.now_url, dongua_load_var, "POST");
function time_out() {
clearInterval(get_first);
gotoAndPlay("disp_all_fen");
removeMovieClip(_root["dongua"]);
}
get_first = setInterval(time_out, _root.reply_time*1000);
_root.createEmptyMovieClip("dongua", 1);
_root.dongua.onEnterFrame = function() {
if (dongua_load_var.loaded) {
//如果已经有返回就不再计时
clearInterval(get_first);
_root.now_over._visible = false;
//如果收到返回值,就检查是否比最小值大
if (Number(_root.dongua_load_var.lowest_score)<_root.your_score) {
// 得分高于最低分,显示输入框,要求输入用户名
_root.input_name._visible = true;
} else {
gotoAndPlay("disp_all_fen");
}
removeMovieClip(_root["dongua"]);
this.stop();
}
};
stop();
这里的input_name是一个姓名输入窗口,只有当我的得分高于最低分时才出现。
Ö 第2帧:等待数据传递
其标号是wait_lowest,主要用于等待后台传数据过来,程序如下:
stopDrag();
Mouse.show();
Ö 第3帧:与第2帧一起形成等待:
gotoAndPlay("wait_lowest");
Ö 第4帧:标号是disp_all_fen,将排行榜中的得分显示在屏幕上
程序如下:
stopDrag();
Mouse.show();
//显示排名名单
for (i=0; i<=9; i++) {
_root["name"+i] = _root.dongua_load_var["name"+i];
_root["score"+i] = _root.dongua_load_var["score"+i];
}
if (_root.dongua_load_var.loaded) {
_root.now_over._visible = false;
} else {
stopAllSounds();
//跳到游戏的最开始位置
gotoAndPlay("game_menu", 1);
}
removeMovieClip(_root["dongua"]);
//显示排行榜的时候就不要再显示用户名输入框
_root.input_name._visible = false;
Ö 第5帧:延迟程序
//显示排行榜10秒钟
stopDrag();
Mouse.show();
begin = getTimer();
reply_time = 10;
Ö 第6帧:标号是fen_disp_loop,让积分显示保留秒
程序如下:
stopDrag();
Mouse.show();
now = getTimer();
if (now-begin>1000*reply_time) {
stopAllSounds ();
gotoAndPlay ("game_menu", 1);
}
Ö 第7帧:与第6帧一起完成画面停留10秒
gotoAndPlay("fen_disp_loop");
Ö 第10帧:标号是process
程序如下:
stopDrag();
Mouse.show();
begin = getTimer();
reply_time = 15;
Ö 第11帧:标号是change_paiming
程序如下:
stopDrag();
Mouse.show();
_root.now_over._visible = false;
if (_root.dongua_load_var.loaded) {
tellTarget (_root) {
gotoAndPlay ("gameover", "disp_all_fen");
}
}
now = getTimer();
if (now-begin>1000*reply_time) {
_root.input_name.gotoAndStop(1);
gotoAndPlay ("game_menu", 1);
}
Ö 第12帧:与第11帧形成循环
gotoAndPlay("change_paiming");
其实第10帧到12帧的内容是当用户在输入用户名之后,发出一个修改后台排行榜积分的请求,于是程序便需要在这里等待结果了。