RPG_Basic(27): 发射炮弹Projectiles
Youtube视频地址:HeartBeast
实现效果如下:
创建一个新对象obj_projectile,它和obj_damage类似。在create事件中,初始化
creator = noone;
knockback = 10;
phy_bullet = true;
实际上游戏引擎上的物体移动不是现实生活中连续运动的,而是闪烁移动的,从某个点接着闪烁到某个点,所以有时候会在游戏引擎内看到如果运动的速度太快,会导致物体穿过一面墙的错误。
这里会用到phy_bullet变量来设置为true.这个变量能够帮助我们穿墙的问题,然后对该对象的物理属性进行设置,除了Density密度,其他都设置为0
然后勾选Sensor,这意味着它不会与其他物体发生实体碰撞,而仅仅只是检测到物体之间的重叠。
然后添加和obj_wall的collision事件
instance_destory()
添加和obj_lifeform_parent形式的碰撞事件(对生命体进行伤害,计算击退距离)
我们需要使炮弹击中敌人时,对敌人造成伤害,然后移除,但是这个移除并不是立刻的,因为我们想要在击中的时刻也对附近的敌人造成伤害,所以我们并不打算在碰撞检测到的事件中立刻将敌人删除,而是在下一帧中移除,所以这里引入了一个alarm[0]变量,并创建alarm[0]事件。在该事件中来移除实例对象。
这样它就会击中多个对象。
设置obj_projectile的经理为黑色的圆形spr_damage,并且确保碰撞遮罩形状选取为circle
obj_projectile已经完成了,所以接下来是怎么在游戏中创建该实例,首先,在输入检测脚本scr_get_input中,增加spell_key来控制发射炮弹
炮弹的发射是角色来触发的,所以在角色的行动状态scr_move_state脚本,在attack_key检测后面,增加发射炮弹的spell_key的检测。以20的速度发射,然后分解到x和y方向上的速度,然后使用with语句,对炮弹实例施加冲击力。
到此,发射炮弹的即完成了。