打开房间rm_level_1,拖几个敌人进去,排列一下,组成一个三角形的阵型。如图
对了,还要把obj_controller,也拖进去,会以问号的图标显示在上面。
游戏状态,参考FC游戏小蜜蜂,有三种状态,一个是游戏中,一个是暂停,还有一个是结束游戏。如图
状态的代码,填写在obj_controller里,在create事件里添加如下代码
enum states{
playing,
paused,
gameover
};
global.game_state=states.playing;
再添加一个按钮事件,用于状态的转换,就用ESC键吧,填写下面的状态转换代码
if(global.game_state==states.playing)
{
global.game_state=states.paused;
show_debug_message("PAUSE -"+string(global.game_state));
}
else if(global.game_state==states.paused)
{
global.game_state=states.playing;
show_debug_message("PLAYING -"+string(global.game_state));
}
这里有两个状态,可以切换。分别是暂停和游戏中。那么游戏结束的状态是,由玩家的发挥来决定了。
在obj_player的Destroy里事件里,增加下面的代码
global.game_state=states.gameover;
show_debug_message("GAMEOVER -"+string(global.game_state));
同样,玩家消灭了所有敌人,游戏也结束。在obj_controller对象里,添加step事件,填写如下代码。
if(!instance_exists(obj_enemy_red))
{
global.game_state=states.gameover;
}
show_debug_message("STATE CODE="+string(global.game_state));
上面的代码,表示敌人被全部干掉后,游戏也自动结束。
按F5 ,执行后,发现,控制台信息,会根据我们按ESC键,提醒不同的状态文字。但是游戏中的飞船,并没有暂停。玩家也能操作。
我们需要继续修改关于操作移动方面的语句。
首先是,玩家的操作要修改,如下为修改后的代码
左方向键:
if(x>0+sprite_width/2 and global.game_state==states.playing)
{
x-=spd;
}
右方向键:
if(x<room_width-sprite_width/2 and global.game_state==states.playing)
{
x+=spd;
}
空格键:
if(can_shoot and global.game_state==states.playing)
{
can_shoot=false;
var bullet=instance_create_layer(x,y,"Instances",obj_bullent_player);
bullet.atk=atk;
bullet.direction=point_direction(x,y,x,y-1);
//bullet.speed=bullet.spd;//这里把子弹速度的语句也注释掉
alarm[0]=shoot_delay;
}
我们还要让玩家子弹也能暂停,要添加一个step事件给obj_bullet_player,填写如下代码
if(global.game_state==states.playing)
{
speed=spd;
}
else
{
speed=0;
}
这样,按ESC后,速度也会变0了。
敌人呢,也要进行相关的修改,在obj_enemy_red对象里,打开Alarm 1事件,把速度语句注释掉,并添加状态判断,如下所示
if(global.game_state==states.playing)
{
var bullet=instance_create_layer(x,y,"Instances",obj_bullent_enemy);
bullet.atk=atk;
bullet.direction=point_direction(x,y,x,y+1);
//bullet.speed=bullet.spd;
}
alarm[1]=room_speed*random_range(0.5,5);
alarm 0事件也要添加状态判断
if(global.game_state==states.playing)
y+=30;
alarm[0]=move_down_speed;
最后,敌人的子弹,状态也要判断,在obj_bullet_enemy对象里,修改step事件,如下
if(global.game_state==states.playing)
{
speed=spd;
}
else
{
speed=0;
}
这样,我们再次进行,测试。效果如图所示,中途是按下了ESC键,从暂停又恢复游戏中。
暂无关于此日志的评论。