使用Godot4组件制作竖版太空射击游戏_2D卷轴飞机射击(一)
使用Godot4组件制作竖版太空射击游戏_2D卷轴飞机射击-激光组件(二)
使用Godot4组件制作竖版太空射击游戏_2D卷轴飞机射击-飞船动画(三)
使用Godot4组件制作竖版太空射击游戏_2D卷轴飞机射击-滚动背景(四)
使用Godot4组件制作竖版太空射击游戏_2D卷轴飞机射击-敌人配置(五)
使用Godot4组件制作竖版太空射击游戏_2D卷轴飞机射击-碰撞框和受伤区域(六)
开发思路
整体开发还是基于组件的思维。相比于工厂模式或者状态机,可能有些老套,但是更容易理解和编程
教程大概是2个小时 基本上一个小时就能有游戏的雏形。
不过由于都是初学者,所以大概整体是应该4个小时左右。
本篇文章实现敌人受伤、爆炸、销毁的相关效果,约15分钟
受伤组件
添加HurtComponent组件到enemy下,确保所有敌人都可以使用。检查器需要配置状态组件,主要是将受伤框和状态数据关联起来,受到伤害时会通过状态组件减少生命值,
代码修改如下,增加缩放,闪烁,摇动动画,调用对应函数即可,
代码分析:
调用了缩放组件的tween_scale 闪光组件的 falsh()和振动组件的tween_shake
这些组件实现了对应动画
还增加了一个连接connect,组件没有生命值后销毁该组件
运行游戏,攻击敌人后,敌人会闪烁震动,攻击敌人三次后消失。
爆炸组件
爆炸效果
调用已经存在的组件,使用组名称是一次性动画效果onetime_animated_effect
作用是提供一个精灵动画类,完成时销毁自身
新建一个场景,根节点为onetime_animated_effect
名字修改为ExplosiondEffect爆炸效果
找到素材中爆炸效果,然后添加到动画精灵中,动画名称随意,水平5 垂直1
由于动画速度较慢,因此fps调整为10加快动画效果,并打开自动播放
动画无法自行启动就无法触发销毁
生成器添加
爆炸效果做好了,需要添加一个生成器,生成爆炸
切换到敌人场景,添加生成组件SpawnerComponent
将做好的爆炸场景添加到检查器属性场景中
再添加一个销毁组件DestoryedComponent,
组件作用是让敌人生命值为0时触发爆炸动画,并且销毁敌机组件
属性需要设置以下参数 ememy statcompoent SpawnerComponent 组件
在这里能够看出使用组件的好处。无需代码就可以实现爆炸效果
运行程序后,敌人死亡就会产生爆炸效果,不过爆炸效果无法消失
原因是动画循环选中后,不会发出动画结束的信号。
针对这个问题解决方案好几个
1关闭循环
2组件中直接添加代码删除自身
本次只暂时关闭循环
返回爆炸效果场景,关闭动画自动循环,爆炸就会消失
飞船摧毁动画
同样,飞船需要添加组件使得能够被摧毁
首先添加状态组件,生命值设置为1
再添加受伤区域组件hurtbox 碰撞区域要选择CollisionPolygon2D碰撞形状多边形,因为飞船形状不规则。
选中CollisionPolygon2D,点击右上角创建点的按钮,选择碰撞层layer是1, 然后沿着飞船边缘添加碰撞区域。
再添加状态栏,将受伤组件和飞船关联起来。
到这一步,飞船就已经能收到伤害了,飞船碰撞到敌人生命值会降低,但是还不会摧毁
因此要像敌人或者激光子弹例子一样,添加爆炸生成组件,也就是SpawnerComponet组件
SpawnerComponent2修改名称为ExplosionSpawnerComponent
场景加载为爆炸场景
DestroyedComponent组件和子弹类似,按照图片配置检查器属性
这样再运行游戏,飞船和敌人碰撞飞船就会爆炸,不过敌人不会摧毁。
敌人摧毁动画
代码只需要添加一行再在enemy中即可,
一般使用queue_free释放组件即可,使用queue_free.unbind(1) 是为了解绑参数 ,能看到hitbox存在一个参数
这样再运行游戏,敌人和飞船碰撞后就都会爆炸了