使用Godot4组件制作竖版太空射击游戏_2D卷轴飞机射击(一)
使用Godot4组件制作竖版太空射击游戏_2D卷轴飞机射击-激光组件(二)
使用Godot4组件制作竖版太空射击游戏_2D卷轴飞机射击-飞船动画(三)
使用Godot4组件制作竖版太空射击游戏_2D卷轴飞机射击-滚动背景(四)
使用Godot4组件制作竖版太空射击游戏_2D卷轴飞机射击-敌人配置(五)
使用Godot4组件制作竖版太空射击游戏_2D卷轴飞机射击-碰撞框和受伤区域(六)
使用Godot4组件制作竖版太空射击游戏_2D卷轴飞机射击-受伤 爆炸 销毁组件(七)
开发思路
整体开发还是基于组件的思维。相比于工厂模式或者状态机,可能有些老套,但是更容易理解和编程
教程大概是2个小时 基本上一个小时就能有游戏的雏形。
不过由于都是初学者,所以大概整体是应该4个小时左右。
本篇文章实现敌人在场景中的随机生成,约10分钟
敌人生成器
删除world中已经有的敌人节点,后续敌人都要依赖节点生成器生成了
新建一个node2d场景EnemyGenerator保存
添加两个组件
一个SpawnerComponent生成器组件生成敌人
一个计时器组件,定时生成敌人,定时器名称更改为GreenEnemySpawnTimer
EnemyGenerator新建脚本
ctrl拖动组件生成组件初始化代码
补全声明,新建函数handle_spawn如下所示,设定生成器场景,同时设定生成器坐标,这个目标是让敌人从屏幕上方两侧随机生成
代码如下
添加代码如下所示
代码分析
spawner_component.scene = enemy_scene //敌人生成场景的设置
这行语句是屏幕宽度的设置,可以直接从border_bounce_component组件中复制如下图所示
ProjectSettings.get_setting("display/window/size/viewport_width")
@export var GreenEnemyScene : PackedScene
var margin = 8
GreenEnemyScene 是载入的敌人场景
margin是代表边距,后续需要一个边距为8的向量
spawner_component.spawn(Vector2(randf_range(margin,screen_width-margin),-16))
这行语句就是真正的生成了,生成是一个矢量坐标,矢量坐标是 (x,y) 这样的类型
x轴坐标由随机函数randf_range生成,具体位置就是在边距为8的X轴位置生成。两边都是8
所以一边为8,一边是屏幕最大值-8
y轴坐标是-16,保证敌人在最上方屏幕外面生成,生成时不让玩家看见
属性配置
除此之外,还需要设置敌人生成器场景为绿色敌人。防止没有目标生成
GreenEnemySpawnTimer定时器检查器属性需要设置
1waittime等待时间设置为2s
2 oneshot 设置 启用,做单次触发,为了控制下一次触发事件
3Autostart 设置 启用,做自动触发
后续会将分数和敌人生成频率相关。如果分数增加,那么敌人生成速度会增加。方便提升难度
目前游戏运行,已经可以执行基本的游玩了
下一章制作标题菜单和游戏结束界面