HOME / 第 7 部分 · 完整游戏项目实战 / 第 87 课
MODULE 7 · 完整游戏项目实战

第 87 课 · 弹幕射击游戏(二):完善与特效

⏱ 预计时长 50 分钟📊 难度 进阶📚 模块 第 7 部分 · 完整游戏项目实战

🎯 本课学习目标

弹幕游戏收官:BOSS 战、爆炸特效、计分结算。

📖 详细教学步骤

爆炸特效代码

敌机被击落时的爆炸:

GDSCRIPT# 爆炸场景 explosion.tscn: GPUParticles2D
func spawn_explosion(pos: Vector2):
    var fx = explosion_scene.instantiate()
    fx.global_position = pos
    get_parent().add_child(fx)
    fx.emitting = true
    # 播完自动删除
    fx.finished.connect(fx.queue_free)

计分系统代码

击落敌机得分 + HUD 显示:

GDSCRIPT# Globals.gd
var score: int = 0

# enemy.gd 死亡时
func die():
    Globals.score += 100
    spawn_explosion(global_position)
    queue_free()

# hud.gd
func _process(delta):
    $ScoreLabel.text = "得分: " + str(Globals.score)

BOSS 敌人搭建

大型敌机 + 血条:

GDSCRIPTextends Area2D

var hp: int = 200
@onready var hp_bar: ProgressBar = $HpBar

func _ready():
    body_entered.connect(_on_body_entered)

func take_damage(amount: int):
    hp -= amount
    hp_bar.value = hp
    if hp <= 0:
        die()

func die():
    Globals.score += 1000
    spawn_explosion(global_position)
    get_tree().current_scene.show_win()   # 击败 BOSS 通关
    queue_free()

BOSS 弹幕(进阶)代码

BOSS 螺旋弹幕(旋转扇形):

GDSCRIPTvar spin_angle: float = 0.0

func _physics_process(delta):
    spin_angle += 2.0 * delta
    # 每 0.3 秒发射一圈
    timer -= delta
    if timer <= 0:
        timer = 0.3
        for i in range(8):
            var angle = spin_angle + i * TAU / 8
            var b = enemy_bullet.instantiate()
            b.global_position = global_position
            b.dir = Vector2(1, 0).rotated(angle)
            get_parent().add_child(b)

生命与结束界面集成

  1. 玩家生命:被弹幕击中扣 1 命(3 命),短暂无敌闪烁
  2. 命尽 → 游戏结束界面(得分 + 重开)
  3. BOSS 死 → 通关界面
  4. 都从第 28/66 课复用逻辑

完整测试与打磨收尾

  1. 流程:开局 → 小怪波 → BOSS 战 → 通关/失败 → 结算
  2. 加音效:射击、爆炸、命中
  3. 粒子:爆炸、子弹拖尾、背景星点
  4. 手感:子弹速度、弹幕密度
  5. 完整玩 3 遍

🎉 完整弹幕射击游戏完成!

⚠️
BOSS 血条不动?

确认 take_damage 每帧调用 hp_bar.value 更新,且 BOSS 的 take_damage 真的被子弹调用。

⚠️
爆炸特效不同步?

特效播完用 finished 信号删除,别手动定时删(会有残留或早删)。

🧪 动手试一试

🏋️ 课后练习

给 BOSS 设计 2 阶段:血量低于 50% 时弹幕加密 + BOSS 加速变色。

hp < max_hp/2 时切换 fire_interval 和颜色。

💡

BOSS 战是弹幕游戏的高潮,多设计几套弹幕更有趣。

💡

粒子爆炸 + 屏幕震动(第 23 课 shake)组合打击感强。

🎓 本课小结

弹幕游戏完整版:爆炸粒子 + 计分 HUD + BOSS 血条与螺旋弹幕 + 生命/结束界面;特效与反馈齐全。