跳跃能力的添加
在obj_player的create事件里增加变量,jspd=10,vsp=0;
在step事件的最下面,增加如下代码
var jumping = keyboard_check_pressed(vk_space);
if ( grounded and jumping )
{
vsp = -jspd;
grounded = false;
sprite_index = spr_player_idle;
}
运行游戏,效果如图
建立obj_ladder对象,贴图选择那个梯子图案,游戏场景里,可以新建一个实例图层,再放进去,和原来的砖块实例图层分离出来。
攀爬能力的添加
在obj_player对象的create事件里,增加一行代码
climbing=false;
在step事件里,修改和添加如下代码:
var keyleft=keyboard_check(vk_left); var keyright=keyboard_check(vk_right); var keyup=keyboard_check(vk_up); var keydown=keyboard_check(vk_down); var jumping=keyboard_check_pressed(vk_space); var move=keyright-keyleft; var vmove=keydown-keyup; hsp=spd*move; vsp=vsp+grv; //WALKING if(move!=0) { image_xscale=move; if(grounded) { sprite_index=spr_player_walk; } } else { if(not climbing) { sprite_index=spr_player_idle; } } //JUMP if(grounded and jumping) { vsp=-jspd; grounded=false; sprite_index=spr_player_idle; audio_play_sound(snd_jump,1,false); } //horizontal collision with blocks if(place_meeting(x+hsp,y,obj_block)) { while(not place_meeting(x+sign(hsp),y,obj_block)) { x+=sign(hsp); } hsp=0; } x+=hsp; //vertical collision with blocks if(place_meeting(x,y+vsp,obj_block)) { if(not climbing) { while(not place_meeting(x,y+sign(vsp),obj_block)) { y+=sign(vsp); } vsp=0; grounded=true; } } else { grounded=false; } //climbing if(place_meeting(x,y+1,obj_ladder)) { if (vmove<0) or(vmove==0 and climbing) or (vmove>0 and place_meeting(x,y+sprite_height,obj_ladder)) { climbing=true; } else { climbing=false; } } else { climbing=false; } //-------------------- if(climbing) { vsp=vmove*spd; sprite_index=spr_player_climb; } // y+=vsp;
最关键的是最后一句代码,必须放在最后,这个是重力系统和攀爬系统里都要使用的变量,需要前面的代码,执行完后,再执行这句话。如果把它放在任意位置,会使玩家对主角失去控制。
按F5执行效果如下
暂无关于此日志的评论。