和之前的太空小蜜蜂一样,我们要建一个状态控制对象。用来控制游戏的四种状态。游戏中,暂停,死亡,gameover.如下图所示
还是通过按ESC键,来打开菜单,选择状态。
我们先建立obj_controller对象,方便管理游戏中的状态。在create事件里填写下面的代码
enum states{
playing,
paused,
dead,
gameover
};
global.game_state=states.playing;
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;
if(room==room0)
{
lives=3;
}
上面的代码,用于定义游戏的4个状态,游戏中要收集的樱桃数量,玩家的默认出生点位,菜单项目,玩家的命数。
继续增加step事件,填写如下代码
var esc_pressed=keyboard_check_pressed(vk_escape);
var enter_pressed=keyboard_check_pressed(vk_enter);
var move=keyboard_check_pressed(vk_down)-keyboard_check_pressed(vk_up);
if(esc_pressed)
{
if(global.game_state==states.playing)
{
global.game_state=states.paused;
audio_play_sound(snd_menu,1,false);
instance_deactivate_all(true);
}
else if(global.game_state==states.paused)
{
global.game_state=states.playing;
instance_activate_all();
}
}
if(global.game_state==states.paused)
{
menu_index+=move;
if(move!=0)
{
audio_play_sound(snd_menu,1,false);
}
if(menu_index<0)
{
menu_index=opt_number-1;
}
else if(menu_index>opt_number-1)
{
menu_index=0;
}
if(enter_pressed)
{
switch(menu_index)
{
case 0:
global.game_state=states.playing;
instance_activate_all();
break;
case 1:
game_restart();
break;
case 2:
game_end();
}
}
}
用于菜单项里功能执行,这里面和之前的太空蜜蜂游戏有所不同,让实例静止,我们是直接用了instance_deactivate_all(true),而不是修改实例的速度为0.
我们继续增加一个事件用于菜单的可视化效果展示,Draw GUI事件,没有这个事件,玩家就看不到菜单界面了。填写如下代码,功能和之前的游戏差不多。
if(global.game_state==states.paused)
{
draw_set_color(c_white);
draw_set_font(fnt_score);
draw_text(room_width/2,room_height/2,"PAUSE");
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]);
}
}
按F5,执行游戏,如果报错,请在游戏场景里,添加obj_cherry对象,修改房间名称为room0,要区分大小写的。正常运行的效果如下
暂无关于此日志的评论。