新建一个obj_bullet,增加create事件,添加如下代码
speed=30; atk=0; start_x=x; shoot_range=200;
上面的代码,定义了子弹的速度,攻击力,还有射程。
添加step事件,增加如下代码
if abs(start_x-x)>shoot_range { instance_destroy(id,false); }
上面的代码,表示如果子弹超过射程,就消灭子弹。给武器一个射程很重要,它可以避免玩家从房间另一边射击和杀死敌人,导致游戏失去挑战性。
我们还要在子弹碰到墙壁后也要消失,所以还要添加碰撞事件,对象为obj_block,插入代码
instance_destroy();
增加destroy事件,让子弹消失时,有一个动画效果
effect_create_above(ef_spark,x,y,0.4,c_yellow);
就这样,这个子弹就做好了。现在需要让主角能够开枪射击了。
修改obj_player里的create事件,添加如下代码
//战斗系统 can_attack=true; atk_speed=0.3;
上面的代码表示了,射击的速率为每隔0.3秒,发射一次。
修改step事件,增加射击的按钮动作
var attack=keyboard_check(ord("C")) or gamepad_button_check(0,gp_face3);
这个表示,用键盘上的C,和手柄上的X键,就能射击。
继续我们把射击动作执行的代码,添加到step事件的倒数第二行。
//ATTACK if attack and can_attack and not ds_map_empty(equipped) { var bullet=instance_create_layer(x,y,"player",obj_bullet); bullet.direction=direction; bullet.atk=ds_map_find_value(equipped,"value"); bullet.sprite_index=ds_map_find_value(equipped,"bullet_type"); can_attack=false; alarm[1]=room_speed*atk_speed; audio_play_sound(snd_shoot,1,false); }
上面的代码,表示如果我们装备了武器,那么就可以射击,射击的子弹类型也会根据装备来变更。还要一个闹铃1的事件,用来控制射击的频次。
在Alarm1 里填写下面的代码
can_attack=true;
好的,现在一切都准备好测试了! 保存和运行游戏,效果如下
现在,我们就差敌人了,没有敌人,这个武器也就没有作用。
暂无关于此日志的评论。