我们先删除两个球状敌人,再修改obj_ball为obj_enemy.删除obj_controller里的闹钟1,因为不需要重复生成之前的敌人了。还要修改create事件,修改后的代码如下
enum states{
playing,
paused,
dead,
gameover
};
global.game_state=states.playing;
global.money=score;
//global.cherries=0;
//global.cherries_max=instance_number(obj_cherry);
//global.startx=obj_player.x;
//global.starty=obj_player.y;
option=["RESUME","RESTART","QUIT"];
opt_number=array_length_1d(option);
menu_index=0;
//lives=3;
//if(room==room1)
//{
//alarm[1]=room_speed*1;
//}
这样做, 是因为,我们不需要在主角挂掉后,回到出生点,而是,重启关卡。也不需要以收集全部的樱桃为胜利的条件。横版过关的胜利条件已经改为,走到关底就胜利。还要修改obj_goal里的step事件,注释下面的语句。
//if(global.cherries==global.cherries_max and not goal_reached)
//{
//active=true;
//}
删除房间1,保留房间0。
继续修改obj_controller里的step事件,修改处如下
if(global.game_state==states.gameover)
{
instance_deactivate_all(1);
//menu_index+=move;
//if(move!=0)
//{
//audio_play_sound(snd_menu,1,false);
//}
//if(menu_index<1)
//{
//menu_index=opt_number-1;
//}
//else if(menu_index>opt_number-1)
//{
//menu_index=1;
//}
//if(enter_pressed)
//{
//switch(menu_index)
//{
//case 1:
//game_restart();
//break;
//case 2:
//game_end();
//}
//}
if(enter_pressed)
{
game_restart();
}
}
if(global.game_state==states.dead)
{
lives--;
alarm[0]=room_speed*1;
global.game_state=states.playing;
if lives<=0
{
global.game_state=states.gameover;
}
}
上面的代码,注释了菜单选择的功能,增加了,按回车键,重启游戏。修改闹铃0事件,代码如下
//instance_create_layer(global.startx,global.starty,"player",obj_player);
room_restart();
score=global.money;
上面的代码,注释了第一行,不需要只重生主角,而是要整个关卡都重启。防止玩家重复刷钱。重置了分数为0。
最后还要修改GUI,原来是单屏的,位置可以固定在最上面一行,现在要跟着摄像机来相对位置的变动。修改后的代码如下
var cam_w=display_get_gui_width();
var cam_h=display_get_gui_height();
draw_set_color(c_black);
draw_rectangle(0,0,room_width,40,false);
draw_set_color(c_white);
draw_set_font(fnt_score);
draw_text(20,10,"SCORE:"+string(score));
//draw_set_color(c_white);
//draw_sprite_ext(spr_cherry,-1,(room_width/2)-32,20,0.5,0.5,0,c_white,1);
//draw_text(room_width/2,10,string(global.cherries)+"/"+string(global.cherries_max));
draw_set_color(c_white);
draw_sprite_ext(spr_player_idle,-1,cam_w-120,20,0.5,0.5,0,c_white,1);
draw_text(cam_w-100,10,"X"+string(lives));
if(global.game_state==states.paused)
{
draw_set_color(c_black);
draw_rectangle(0,0,cam_w,cam_h,0);
draw_set_color(c_white);
draw_set_font(fnt_score);
draw_text(cam_w/2,cam_h/2,"PAUSE");
for(var i=0;i<opt_number;i++)
{
if(menu_index==i)
{
draw_set_color(c_red);
}
else
{
draw_set_color(c_white);
}
draw_text(cam_w-200,cam_h-200+30*i,option[i]);
}
}
if(global.game_state==states.gameover)
{
draw_set_color(c_black);
draw_rectangle(0,0,cam_w,cam_h,0);
draw_set_color(c_white);
draw_set_font(fnt_score);
if(lives<=0)
{
draw_text(cam_w/2,cam_h/2,"GAME OVER");
}
else
{
draw_text(cam_w/2,cam_h/2,"YOU WON!");
}
for(var i=0;i<opt_number;i++)
{
if(menu_index==i)
{
draw_set_color(c_white);
}
else
{
draw_set_color(c_dkgray);
}
draw_text(1200,600+30*i,option[i]);
}
}
上面的代码,新增了两个变量,取出摄像机的长和宽,用于替换原来的房间长宽。按暂停时,摄像机所在的屏幕就会变黑。游戏运行效果如下
暂无关于此日志的评论。