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

第 92 课 · 2D RPG 实战(三):战斗、背包与完成

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

🎯 本课学习目标

RPG 收官:回合制战斗 + 背包 + 完成整合。

📖 详细教学步骤

战斗设计设计

  • 接触怪物进入战斗场景
  • 回合制:玩家攻击/技能/使用道具/逃跑
  • 敌人行动 → 玩家行动 循环
  • 胜利得经验/金币

战斗场景搭建

  1. 新建 battle.tscn:背景 + 敌人显示 + 玩家状态 + 操作按钮
  2. 传入敌人数据(从 Globals 或参数)
  3. 回合流程脚本

回合制逻辑代码

核心回合循环:

GDSCRIPTextends Node

var enemy_hp: int = 50
var player_hp: int = 100
var player_turn: bool = true

func _on_attack_pressed():
    if not player_turn: return
    # 玩家攻击
    enemy_hp -= 10
    update_display()
    if enemy_hp <= 0:
        win()
        return
    player_turn = false
    await get_tree().create_timer(0.8).timeout
    enemy_turn()

func enemy_turn():
    player_hp -= 8   # 敌人攻击
    update_display()
    if player_hp <= 0:
        lose()
        return
    player_turn = true

背包系统代码

背包数据(第 68 课物品资源):

GDSCRIPT# Globals.gd
var inventory: Array[ItemData] = []
var gold: int = 50

func add_item(item: ItemData):
    inventory.append(item)

func use_item(item: ItemData):
    match item.type:
        "potion":
            player_hp = min(player_hp + item.heal_amount, max_hp)
        "weapon":
            attack += item.power
    inventory.erase(item)

背包 UI搭建

  1. 按 B/I 打开背包面板
  2. 物品列表(VBoxContainer + 图标 + 数量)
  3. 选中物品 → 使用/丢弃按钮
  4. 第 68 课的资源驱动物品直接可用

战斗奖励与经验代码

胜利后:

GDSCRIPTfunc win():
    Globals.gold += 30
    Globals.exp += 20
    # 掉落物品
    if randf() < 0.5:
        Globals.add_item(potion_item)
    show_result("胜利! 获得金币和经验")
    await get_tree().create_timer(1.5).timeout
    get_tree().change_scene_to_file("res://scenes/world.tscn")

整合与完成收尾

  1. 世界场景:接触怪物 Area2D → 切战斗场景
  2. 主菜单 + 存档(第 62 课)
  3. 音效与特效:攻击、受伤、胜利
  4. 完整流程:村庄接任务 → 打怪 → 交任务 → 商店买装备 → 挑战 BOSS
  5. 测试全流程

🎉 完整 RPG 原型完成!你已经具备制作完整游戏的能力。

⚠️
战斗回合乱?

用 player_turn 布尔锁定回合,敌人行动用 await 延时,别在信号里嵌套混乱。

⚠️
背包物品不会消失?

使用后 inventory.erase(item),注意数组 erase 的是同一个资源引用。

🧪 动手试一试

🏋️ 课后练习

加入「技能系统」:战斗中除了普攻,还能用技能(消耗 MP,伤害更高)。

Globals.mp 变量 + 技能按钮 + 消耗判断。

💡

RPG 系统多,用 Globals 单例统一管理玩家状态。

💡

先做「最小的完整循环」:接任务→打怪→奖励,再扩展。

🎓 本课小结

RPG 完整版:回合制战斗(攻/技/道具)+ 背包物品 + 战斗奖励 + 世界探索 + 存档;一个五脏俱全的 RPG 原型。