第一个机关是,跳跃平台,主角在上面按住空格键后,会比在平地上跳得更高。类似于超级玛丽里的那个小马扎。
我们先创建一个对象,obj_platform_trampoline,分配贴图spr_platform_trampoline.设置父对象为obj_block。在create事件里,增加一个跳跃力度jump_force,值为6;在step事件里,填写下面的代码
if(place_meeting(x,y-1,obj_player))
{
obj_player.force_jump=true;
if(keyboard_check(vk_space))
{
obj_player.jspd_bounce=jump_force;
}
}
打开obj_player,在create事件里增加两个代码
jspd_bounce=0;
force_jump=false;
修改他的step事件,在JUMP的动作代码里,修改代码,如下
//JUMP
if(grounded and jumping or force_jump)
{
force_jump=false;
vsp=-(jspd+jspd_bounce);
jspd_bounce=0;
grounded=false;
sprite_index=spr_player_idle;
audio_play_sound(snd_jump,1,false);
}
上面的代码,是增加了一个判断条件force_jump,从而主角在跳到这个平台时会增加跳跃力度,力度值为6.
把这个跳跃平台放到房间0里,进行测试,效果如下
接下来做第二个类型的,掉落平台,主角跳到上面,过一会,平台就会自动落下。主角需要快速的经过。
我们创建对象obj_platform_falling,增加一个贴图spr_platform_falling。在create事件里增加下面的代码。
triggered=false;
startx=x;
starty=y;
在step事件里,添加下面的代码
if(place_meeting(x,y-1,obj_player) and !triggered)
{
alarm[0]=room_speed*0.5;
triggered=true;
}
在闹钟0事件里,增加下面的代码
move_towards_point(x,y+1,10);
alarm[1]=room_speed*0.5;
这个表示,0.5秒后自动落下
在闹钟1事件里添加如下代码
if not place_meeting(startx,starty,obj_player)
{
instance_create_layer(startx,starty,"Instances",obj_platform_falling);
instance_destroy();
}
else
{
visible=false;
alarm[1]=room_speed*0.2;
}
上面的代码表示,再过0.5秒后,重新生成一个平台。
测试一下,不要忘记了,给这个对象添加一下父对象obj_block。效果如下
最后一个是移动平台,就是会来回移动,主角可以在站在上面,带向某个地方。平台移动不受玩家控制。
创建对象obj_platform_moving,给一个贴图spr_platform_moving。
在create事件里,写上speed=2
在step事件里填写下面的代码
if(place_meeting(x,y,obj_block) or place_meeting(x,y,obj_marker))
{
speed*=-1;
}
if place_meeting(x,y-1,obj_player) or place_meeting(x-1,y,obj_player) or place_meeting(x+1,y,obj_player)
{
obj_player.hsp_carry=speed;
}
上面的代码里,需要用到一个隐藏的对象叫obj_marker,用于设计关卡时,让平台碰撞到他后能返向移动。obj_marker,设置为不可见,在移动平台的两头各放一个。
我们继续修改obj_player里的create事件,增加一行hsp_carry=0
修改step事件,在水平碰撞检测代码上头,添加两行代码
hsp+=hsp_carry;
hsp_carry=0;
这是用于让主角也能在平台移动时,可以来回移动。测试一下,别忘了父对象obj_block要分配给obj_platform_moving,按F5,效果如下
现在有这三个类型的机关,下面就是设计敌人了。
暂无关于此日志的评论。