创建对象obj_player,也就是是我们的主角Berry,把贴图spr_player_idle给它。开始创建他的行走功能。
在create事件里定义行走速度spd=4,然后在step事件里,添加左右方向键的代码,让主角能左右移动,代码如下
var keyleft=keyboard_check(vk_left); var keyright=keyboard_check(vk_right); var move=keyright-keyleft; hsp=spd*move; if(move!=0) { image_xscale=move; sprite_index=spr_player_walk; } else { sprite_index=spr_player_idle; } 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;
运行一下,发现主角可以左右行走了。
接下来设置游戏的边界系统。当主角碰到墙壁后,就不能再往前走,我们要用砖块对象来设置游戏的边界。
设置思路如下
两个类型的砖块对应同一个obj_block这个父对象,共用它的代码。创建obj_block,和两个子对象。我们先把子对象obj_block_brown,放到房间里,和主角处于同一个水平线上。运行游戏,发现,主角可以穿过墙壁。
我们需要修改主角的代码,在step事件里,增加如下代码
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;
上面的代码表示,当主角下一步就要撞墙时,移动速度变为1,直到和墙壁的距离为0时,速度降到0。停在墙壁前。运行游戏,发现主角不会再穿墙了。
游戏重力功能添加
这个功能之所以要增加,是因为主角有跳跃的能力。修改主角代码,在create事件里增加
grv=0.5; vsp=0; grounded=false;
在step事件里增加如下代码
vsp=vsp+grv; if(place_meeting(x,y+vsp,obj_block)) { while(not place_meeting(x,y+sign(vsp),obj_block)) { y+=sign(vsp); } vsp=0; grounded=true; } else { grounded=false; } y+=vsp;
游戏房间里重新设置一下界面,四周围上一圈墙。主角仍旧在半空中放着好了,运行游戏。
效果如下。
这个是重力的模拟效果。
暂无关于此日志的评论。