看到游戏素材里的敌人,知道是章鱼怪。行动方式为左右移动和上下浮动,还有一个最大的特点,主角可以踩死它们。
我们创建一个对象obj_octopus_green,设置父对象为obj_enemy,赋予贴图spr_octopus_green。增加create事件,在里面设置移动方向和速度的初始值。代码如下
dir=1; spd=4;
dir是方向变量,spd是速度变量。当章鱼怪碰到障碍物时,会向相反方向移动。实现的方法为增加step事件,填写如下代码:
if(global.game_state==states.playing) { if place_meeting(x,y,obj_block) or place_meeting(x,y,obj_marker) { dir*=-1; image_xscale=image_xscale*-1; } x+=spd*dir; }
上面的代码表示,章鱼怪碰到obj_block对象或者是obj_marker对象,移动方向就反向,贴图也反向。如果没有碰到,则继续前进。
我们再增加一个Destroy事件,用于被踩死时出现的效果。
effect_create_above(ef_firework,x,y,1,c_purple); audio_play_sound(snd_squash,1,false);
我们给主角增加踩死敌人的能力。修改碰撞事件,在里面填写下面的代码
if(y+sprite_height/2)<other.y { instance_destroy(other); force_jump=true; } else { global.game_state=states.dead; instance_destroy(); }
上面的代码,是主角出现在敌人上方并且碰到敌人的话,敌人就判定为踩死。否则,就是主角被敌人干掉。
测试一下代码,在房间0里放入绿色的章鱼怪并在它两边隔一定距离放上obj_marker,效果如下
第二种是紫色的章鱼怪,上下浮动,也是碰到障碍时向相反方向移动,开始制作。
新建对象obj_octopus_purple,赋予贴图spr_octopus_purple,设置父对象为obj_enemy,添加create事件,进行变量的初始化。代码如下
dir=-1; spd=1; wait=false;
第三个变量,用于浮动的效果切换。添加step事件,填写下面的代码
if(global.game_state==states.playing) { y+=spd*dir; if(place_meeting(x,y,obj_block) and !wait ) { wait=true; spd=0; image_yscale=image_yscale*-1; image_index=0; alarm[0]=room_speed*1; } } //上面的代码表示,如果敌人移动后碰到了障碍物,就停留一会儿,然后再反相移动。
我们继续增加闹铃0,用于过1秒后来执行里面的代码,代码如下
spd=1; dir*=-1; image_index=1; wait=false;
这样,章鱼怪会在停留1秒后,再反相移动。方便玩家躲避。最后,我们添加Destroy事件,填写如下的代码
effect_create_above(ef_firework,x,y,1,c_purple); audio_play_sound(snd_squash,1,false);
测试一下,把章鱼怪放入房间0,放到两个障碍物之间。效果如下
有了敌人,我们还差可收集的金币和提升力量的道具。
不错!继续加油!
indienova编辑器里面应该可以选择代码格式,看起来比较好看