第一步,当玩家按下猛冲键,我们设置一个移动的距离,表示目的地,同时设置变量already_dash为真。
第二步,当变量already_dash为真时,我们要检测主角是否撞到了障碍物。我们也要设置主角移动到目的地后,有一个暂时的浮空。在obj_player的create事件里,添加如下代码:
//dash can_dash=true; already_dash=false; dash_speed=25; dash_power=200; dash_move=0;
在step事件里添加下面的代码
var dashing=can_dash and (keyboard_check_pressed(ord("X")) or gamepad_button_check_pressed(0,gp_shoulderrb));
上面的代码表示,猛冲的按钮设定为X键,手柄上的RB键。
在下面这段代码的后面
if not grounded and not wall_jump and vsp>1 { sprite_index=spr_player_jump_fall; } 我们开始添加猛冲的代码 //dash-phase 1 if dashing and not (already_dash or dash_recharging) { dash_goal=x+dash_power*facing_dir; already_dash=true; effect_create_below(ef_smoke,x,y,1,c_white); audio_play_sound(snd_dash,1,false); sprite_index=spr_player_dash; }
上面的代码,表示 ,如果我们按了猛冲按钮,设置一个冲到的目的地,并让already_dash为真,同时也增加了一个粒子效果和音效,还有最后主角动作图片的设置。
下面添加第二段的代码
//dash-phase 2 if already_dash and not dash_recharging { //floating after dashing vsp=0; jspd=0; grv=0; dash_move=dash_speed*facing_dir; if(place_meeting(x+dash_move,y,obj_block)) { while(not place_meeting(x+sign(dash_move),y,obj_block)) { x+=sign(dash_move); } dash_move=0; already_dash=false; dash_recharging=true; } x+=dash_move; already_dash=already_dash and ((facing_dir>0 and dash_goal>x) or (facing_dir<0 and dash_goal<x)); dash_recharging=not already_dash; if not already_dash { alarm[0]=room_speed*0.2;//stop floating in 0.2secs } }
上面的代码表示,我们检查主角在猛冲时,如果撞到了墙,就要停下动作,并且让变量dash_recharging为真,而相对的already_dash为假。最后动作结束时,我们设置了一个闹铃,让主角浮空0.2秒后,再落到地面。
我们在闹铃事件里添加如下代码
//restore gravity and jump speed after dashing grv=0.8; jspd=18;
最后,我们修改一下水平碰撞的检测代码
在grounded=true下面添加一行。
dash_recharging=true;
这表示,主角在地面上,具备猛冲的技能。
我们按F5,执行,效果如下
在这些技能的装备下,我们的主角玛丽,一点都不怕这个陌生的外星世界。
暂无关于此日志的评论。