Day 5 · 共 10 节

战斗

做出最小战斗闭环:一键攻击、命中扣血、击败敌人。冲突,让故事有代价。

学习目标

搭建带 HP 与 Hurtbox 的敌人场景
为玩家实现带冷却的攻击 Hitbox
稳定命中、可击杀,并处理好与对话的按键冲突

今日课程

今天怎么学

承接 Day3 移动与 Day4 对话。攻击键避开 E。先单测 HP,再接命中,最后排练演示线。

Lesson 1 · 今天只要「打得到、打得死」

店小二说竹林不太平。今天我们把「不太平」做成可玩规则:出现一个敌人,你能攻击它,它会掉血,血量归零后消失或倒下。完成定义请置顶:按攻击键命中敌人至少一次并扣血;连续攻击可击败;过程中输入不与对话严重冲突。

明确不做:华丽连招树、技能冷却 UI 墙、装备数值表、AI 行为树巡逻包抄。那些是扩展包。今天只要一键攻击闭环。贪复杂战斗,是独立游戏坟场最常见墓碑文。

导演视角:战斗是「规则表演」。玩家要立刻读懂因果——我按了,所以它掉血。读不懂因果,特效再炫也是噪声。所以我们用清晰的 Hitbox/Hurtbox 与 print/数字反馈,而不是先做粒子。

竹林入口遇敌战斗示意
冲突让故事有代价:打得到,打得死
战斗最小闭环
靠近 → 攻击 → 扣血 → 击败
敌人有 HP 玩家攻击命中 HP 归零移除
知识点

最小战斗 = 生命值 + 命中判定 + 死亡处理。三条齐了就是游戏;缺一条就只是动画表演。

AI Prompt
我是零基础,Godot 4 古装 RPG。玩家能移动,已有 NPC 对话。请给出「最小可玩战斗」验收清单(不超过 7 条),并警告我今天最不该做的 3 个复杂功能。口语化。

承接检查:移动稳、对话可关。若对话占用同一按键,先把攻击键设为不同键(如 J 或鼠标左键),写进口令本。

把「打得到、打得死」贴在完成定义旁。任何新想法先过这两句。过不了,就不是今天的活。

战斗课最容易情绪化:打空会烦。烦的时候停手,开碰撞可见,看盒子,不要重写世界。

今日禁止清单再读一次:技能树、装备、多人联机。看见就砍需求,不要砍时间。

请把本节要点写进口令本,并用一句话告诉自己明天要带着什么现状开工。

请把本节要点写进口令本,并用一句话告诉自己明天要带着什么现状开工。继续补充验收笔记。

请把本节要点写进口令本,并用一句话告诉自己明天要带着什么现状开工。继续补充验收笔记。继续补充验收笔记。

请把本节要点写进口令本,并用一句话告诉自己明天要带着什么现状开工。继续补充验收笔记。继续补充验收笔记。继续补充验收笔记。

本节小练

写下攻击键与今日 Done。键位冲突先仲裁——没键位,就没有战斗

Lesson 2 · 敌人场景怎么拼

敌人最小结构建议:根 CharacterBody2D(或 Node2D 静止怪)命名 Enemy → Sprite2D → CollisionShape2D(身体挡路/被推)→ Hurtbox(Area2D,专用于受伤)→ 可选 HP 标签。今天敌人可以站桩,不必追人。站桩怪更利于验收命中。

为什么单独 Hurtbox?因为「身体碰撞」和「受伤判定」常要分开调。身体可以较小防卡墙;受伤区可以略大更好打中。混在一个盒子里,手感会又卡又难受。

Hitbox 与 Hurtbox
Hurtbox 负责挨打;Hitbox 负责打人
知识点

把敌人做成 enemy_bandit.tscn 独立场景,再拖进竹林或村外。复制第二个敌人只改数值/贴图即可。模板思维延续 Day4。

AI Prompt
请为 Godot 4 设计站桩敌人最小节点树(含 Hurtbox Area2D),说明每个节点职责与命名。敌人今天不追逐玩家。给出碰撞层最简建议,让玩家攻击能检测到 Hurtbox。

外观:AI 生成「古风山贼」小图,或用色块。占位敌人完全合格。先通规则,再换皮。

放到村口外或单独 bamboo_test.tscn 测试场也行。测试场的好处是干扰少:没有 NPC 对话抢输入。

站桩怪不是偷懒,是实验控制变量。等命中稳定,再加追逐也不迟。变量越少,真相越快。

敌人加到组 enemy,方便检测与未来群体处理。

请把本节要点写进口令本,并用一句话告诉自己明天要带着什么现状开工。

请把本节要点写进口令本,并用一句话告诉自己明天要带着什么现状开工。继续补充验收笔记。

请把本节要点写进口令本,并用一句话告诉自己明天要带着什么现状开工。继续补充验收笔记。继续补充验收笔记。

请把本节要点写进口令本,并用一句话告诉自己明天要带着什么现状开工。继续补充验收笔记。继续补充验收笔记。继续补充验收笔记。

请把本节要点写进口令本,并用一句话告诉自己明天要带着什么现状开工。继续补充验收笔记。继续补充验收笔记。继续补充验收笔记。继续补充验收笔记。

本节小练

纸上画出敌人节点树。Hurtbox 必须单独标出——分不清挨打盒,就分不清 Bug

Lesson 3 · HP:让伤害看得见

给敌人脚本加 hpmax_hp,再加 take_damage(amount):扣血、夹紧到 0、打印剩余血量;到 0 调用 die()。视觉上可用 Label 显示数字,或改 Sprite 颜色闪一下。今天数字 print 也算合格反馈,但有 Label 更直观。

敌人 HP 示意
extends CharacterBody2D

@export var max_hp: int = 3
var hp: int

func _ready() -> void:
    hp = max_hp

func take_damage(amount: int) -> void:
    hp = max(hp - amount, 0)
    print("敌人剩余 HP: ", hp)
    if hp == 0:
        die()

func die() -> void:
    queue_free()
知识点

max_hp=3、每次伤害 1,便于手动点三下验收。数值过大难测,过小一碰就没,都不利于学习反馈。

AI Prompt
请给 Godot 4 敌人写 HP 脚本:max_hp、take_damage、die(queue_free)。再告诉我如何临时用键盘数字键 1 调用 take_damage(1) 做单元测试,不依赖攻击系统。

先单独测 HP:不靠攻击,直接调用扣血。确认能打印并死亡。这样后面若「打了不掉血」,你就知道问题在命中,不在 HP。

HP 用整数即可。浮点血量今天没有收益。简单数值,换来清晰验收。

die 里先 print 再释放,避免「无声无息消失」让你怀疑是否真的死了。

请把本节要点写进口令本,并用一句话告诉自己明天要带着什么现状开工。

请把本节要点写进口令本,并用一句话告诉自己明天要带着什么现状开工。继续补充验收笔记。

请把本节要点写进口令本,并用一句话告诉自己明天要带着什么现状开工。继续补充验收笔记。继续补充验收笔记。

请把本节要点写进口令本,并用一句话告诉自己明天要带着什么现状开工。继续补充验收笔记。继续补充验收笔记。继续补充验收笔记。

本节小练

不攻击,用测试手段把敌人扣到消失。HP 模块独立通过——先证明会死,再证明打得到

Lesson 4 · 玩家攻击键与 Hitbox

在玩家下加 Hitbox(Area2D + CollisionShape2D),默认 monitoring = false 或形状禁用。按下攻击键时,短时间开启(例如 0.15 秒),检测进入的 Hurtbox/敌人,然后关闭。这样攻击是「挥砍窗口」,不是常开电锯。

Input Map 添加 attack,绑定 J 或鼠标左键,避开 E(对话)。脚本 is_action_just_pressed("attack") 触发攻击,并加简单冷却,防止连打穿透逻辑。

按 attack 开启 Hitbox 短暂后关闭
知识点

Hitbox 位置应在角色朝向一侧。左右翻转时,同步翻转或偏移 Hitbox。只改 Sprite 不改 Hitbox,会出现「看着往左砍,打到右边」的鬼畜。

AI Prompt
请用 Godot 4 教我:在 Player 下加 AttackHitbox(Area2D),默认关闭;按 attack 动作短暂开启;与左右 flip 同步方向。给出最简冷却(0.3s)。不要做动画状态机。

开启时 print「挥砍」。先证明攻击动作发生,再接伤害。分段验收继续生效。

攻击可加极短前摇(Timer),但不要超过 0.1s 学习成本。先同步命中,再追求动作感。

Hitbox 形状用矩形就够。多边形完美描边留给以后。

若使用鼠标攻击,记得游戏窗口要有焦点。编辑器焦点问题会伪装成「攻击坏了」。

请把本节要点写进口令本,并用一句话告诉自己明天要带着什么现状开工。

请把本节要点写进口令本,并用一句话告诉自己明天要带着什么现状开工。继续补充验收笔记。

请把本节要点写进口令本,并用一句话告诉自己明天要带着什么现状开工。继续补充验收笔记。继续补充验收笔记。

请把本节要点写进口令本,并用一句话告诉自己明天要带着什么现状开工。继续补充验收笔记。继续补充验收笔记。继续补充验收笔记。

本节小练

按攻击键有打印/可见 Hitbox 闪一下。窗口存在,本节过——没有窗口,就没有命中

Lesson 5 · 命中:Hitbox 碰到 Hurtbox

当攻击 Hitbox 检测到敌人 Hurtbox(或敌人 body),调用对方的 take_damage(1)。注意同一挥砍不要连续扣血十次:用「本段攻击已击中集合」或挥砍期间只结算一次。连扣是新手战斗最冤的 Bug,玩家会以为数值炸了。

知识点

层/掩码必须让 Hitbox 能扫到 Hurtbox。扫不到时,优先检查层,而不是重写伤害公式。层是水管阀门,阀门关着,水(信号)不会来。

AI Prompt
我的 Godot 4 攻击 Hitbox 开了但敌人不掉血。请给排查清单:层/掩码、monitoring、信号连接、take_damage 是否存在、同一次攻击重复命中。按最可能排序,每步要观察什么。

成功标准:一刀 -1 HP 的打印。看见数字,战斗才从想象变成事实。

若信号用 area_entered 却触发 body,或相反,核对你连的是 Area 还是 Body。连错信号家族,会沉默或乱触发。

命中成功时也可让敌人 knockback 一点,非必须。

请把本节要点写进口令本,并用一句话告诉自己明天要带着什么现状开工。

请把本节要点写进口令本,并用一句话告诉自己明天要带着什么现状开工。继续补充验收笔记。

请把本节要点写进口令本,并用一句话告诉自己明天要带着什么现状开工。继续补充验收笔记。继续补充验收笔记。

本节小练

命中一次,HP 明确减少。减了,才谈击杀——先有伤害,才有胜负

Lesson 6 · 受击反馈与死亡

die()queue_free() 是最小死亡。可加:短暂闪白/变红、禁用碰撞、播放一句 print「山贼倒下」。不要一上来做死亡动画状态机与掉落表。

可选:敌人也能碰玩家扣血(接触伤害)。若做,请给玩家同样 take_damage,并加无敌帧(0.5s),否则会一帧扣光。今天时间紧可只做「玩家打怪」,怪不反击——单边战斗仍可验证系统。

HP>0 闪一下 HP=0 queue_free
知识点

死亡后确保 Hitbox 不再继续结算。对象释放后仍持有引用会报错。用 is_instance_valid 或在集合里小心清理。

AI Prompt
请给 Godot 4 敌人完善 take_damage/die:扣血打印、简单位移或颜色闪烁反馈、hp<=0 时 queue_free。可选:接触伤害打玩家 + 玩家无敌帧。默认先实现玩家打怪单向。

三刀打死一只怪。打得死,闭环才算圆。打不死,再炫的攻击都是空气。

单向战斗(只打怪)完全可作为竖切片。反击是加分,不是及格线。及格线是因果可读的击杀。

死亡掉落物品今天禁止。掉落是另一个系统的门。

请把本节要点写进口令本,并用一句话告诉自己明天要带着什么现状开工。

请把本节要点写进口令本,并用一句话告诉自己明天要带着什么现状开工。继续补充验收笔记。

请把本节要点写进口令本,并用一句话告诉自己明天要带着什么现状开工。继续补充验收笔记。继续补充验收笔记。

请把本节要点写进口令本,并用一句话告诉自己明天要带着什么现状开工。继续补充验收笔记。继续补充验收笔记。继续补充验收笔记。

请把本节要点写进口令本,并用一句话告诉自己明天要带着什么现状开工。继续补充验收笔记。继续补充验收笔记。继续补充验收笔记。继续补充验收笔记。

请把本节要点写进口令本,并用一句话告诉自己明天要带着什么现状开工。继续补充验收笔记。继续补充验收笔记。继续补充验收笔记。继续补充验收笔记。继续补充验收笔记。

本节小练

击败一只敌人,场景树里它消失。消失即胜——胜利要可见

Lesson 7 · 冷却、手感与输入仲裁

攻击冷却(如 0.35s)让节奏可读,也减少信号风暴。移动可在攻击时保留,或短暂减速——选一种,写进规则。对话打开时禁止攻击;攻击时若不想对话插入,也可禁 interact。用简单布尔:talking / attacking

手感清单:太远砍空?加大 Hitbox 或靠近再砍。太容易误伤空气?缩小窗口时间。一次只调一个参数,记下前后差异。

知识点

输入仲裁是 Demo 质量关键。同一帧又说话又砍,会制造「灵异事件」。明确优先级:对话中 > 攻击 > 移动(示例),或你自定但要一致。

AI Prompt
请为我的 Godot 4 项目设计最简输入仲裁:对话中禁用 attack;attack 冷却 0.35s;给出伪代码/GDScript。不要引入完整状态机插件。

把键位表写进口令本:移动 WASD、交谈 E、攻击 J(示例)。团队(未来的你)需要这份表。

冷却可用 Timer 节点或累计 delta。哪种都行,保持一种。两套冷却并存会互踩。

键位表更新后,顺便改 FAQ 式备注:攻击键不是 E。

仲裁布尔请集中放一个地方,避免 NPC、玩家、UI 各写各的 talking 标志对不上。

请把本节要点写进口令本,并用一句话告诉自己明天要带着什么现状开工。

请把本节要点写进口令本,并用一句话告诉自己明天要带着什么现状开工。继续补充验收笔记。

请把本节要点写进口令本,并用一句话告诉自己明天要带着什么现状开工。继续补充验收笔记。继续补充验收笔记。

请把本节要点写进口令本,并用一句话告诉自己明天要带着什么现状开工。继续补充验收笔记。继续补充验收笔记。继续补充验收笔记。

请把本节要点写进口令本,并用一句话告诉自己明天要带着什么现状开工。继续补充验收笔记。继续补充验收笔记。继续补充验收笔记。继续补充验收笔记。

请把本节要点写进口令本,并用一句话告诉自己明天要带着什么现状开工。继续补充验收笔记。继续补充验收笔记。继续补充验收笔记。继续补充验收笔记。继续补充验收笔记。

本节小练

对话中按攻击无效果;冷却内连按不刷伤害。规则稳,本节过。

Lesson 8 · 用 AI 一次对齐整条战斗链

当你节点已齐,让 AI 按真实路径输出完整脚本:玩家攻击、敌人 HP、层设置说明、冷却、防重复命中。先贴场景树与键位表,禁止 AI 瞎猜节点名。

联调顺序固定:HP 单测 → 攻击窗口 print → 命中扣血 → 三刀死亡 → 对话冲突检查。每步失败都停,不要「一起修」。

单测 HP 挥砍窗口 命中 击杀
AI Prompt
我是 Godot 4 零基础。下面是我的场景树与键位:【粘贴】。请给出玩家攻击 Hitbox + 敌人 Hurtbox/HP 的完整可粘贴脚本与层配置步骤。要求:防同一次挥砍重复扣血、0.35s 冷却、对话中禁用攻击。先确认树再写代码。
知识点

战斗 Bug 排错时,把「看见的」和「算的」对齐:开调试碰撞形状,确认盒子在砍的方向。眼睛是第一调试器。

把 AI 生成的脚本先放进空项目或备份分支心态:粘贴前复制旧文件。战斗脚本一长,更需要回滚点。

联调成功录像 10 秒,作为 Day6 演示素材雏形。

一次挥砍打中两个怪可以允许。先保证单个目标正确,再测多目标。

请把本节要点写进口令本,并用一句话告诉自己明天要带着什么现状开工。

请把本节要点写进口令本,并用一句话告诉自己明天要带着什么现状开工。继续补充验收笔记。

请把本节要点写进口令本,并用一句话告诉自己明天要带着什么现状开工。继续补充验收笔记。继续补充验收笔记。

请把本节要点写进口令本,并用一句话告诉自己明天要带着什么现状开工。继续补充验收笔记。继续补充验收笔记。继续补充验收笔记。

请把本节要点写进口令本,并用一句话告诉自己明天要带着什么现状开工。继续补充验收笔记。继续补充验收笔记。继续补充验收笔记。继续补充验收笔记。

请把本节要点写进口令本,并用一句话告诉自己明天要带着什么现状开工。继续补充验收笔记。继续补充验收笔记。继续补充验收笔记。继续补充验收笔记。继续补充验收笔记。

请把本节要点写进口令本,并用一句话告诉自己明天要带着什么现状开工。继续补充验收笔记。继续补充验收笔记。继续补充验收笔记。继续补充验收笔记。继续补充验收笔记。继续补充验收笔记。

本节小练

完整击杀一次并保存回放截图。样片到手,才进村庄包装。

Lesson 9 · 竹林遇敌排练

把敌人放到村外/竹林入口,做演示路线:听店小二暗示 → 走出村口 → 遇敌 → 击败。路线本身就是叙事,不必做任务引导箭头。

攻击键与对话键不冲突
命中稳定扣血
可击败并消失
重启后再战仍正常
遇敌排练
演示线:对话暗示 → 出村 → 击败
AI Prompt · 验收
请当战斗验收教练。现状:【能否命中/HP/冷却/键位冲突/已知Bug】。判断是否达到最小可玩战斗,最多 3 条修补,禁止建议做技能树。

只放 1–2 只怪。怪多不等于内容多,系统不稳时怪多等于事故多。

演示线走两遍:你自己一遍,找朋友盲玩一遍。盲玩会暴露你习惯性绕开的坑。

若朋友找不到敌人,说明摆位太偏。敌人是内容,也要被看见。

重启后敌人要在。若你用了不会刷新的临时删除,记得用场景实例而不是只在运行时 new 一次且不保存。

请把本节要点写进口令本,并用一句话告诉自己明天要带着什么现状开工。

请把本节要点写进口令本,并用一句话告诉自己明天要带着什么现状开工。继续补充验收笔记。

请把本节要点写进口令本,并用一句话告诉自己明天要带着什么现状开工。继续补充验收笔记。继续补充验收笔记。

请把本节要点写进口令本,并用一句话告诉自己明天要带着什么现状开工。继续补充验收笔记。继续补充验收笔记。继续补充验收笔记。

请把本节要点写进口令本,并用一句话告诉自己明天要带着什么现状开工。继续补充验收笔记。继续补充验收笔记。继续补充验收笔记。继续补充验收笔记。

请把本节要点写进口令本,并用一句话告诉自己明天要带着什么现状开工。继续补充验收笔记。继续补充验收笔记。继续补充验收笔记。继续补充验收笔记。继续补充验收笔记。

请把本节要点写进口令本,并用一句话告诉自己明天要带着什么现状开工。继续补充验收笔记。继续补充验收笔记。继续补充验收笔记。继续补充验收笔记。继续补充验收笔记。继续补充验收笔记。

请把本节要点写进口令本,并用一句话告诉自己明天要带着什么现状开工。继续补充验收笔记。继续补充验收笔记。继续补充验收笔记。继续补充验收笔记。继续补充验收笔记。继续补充验收笔记。继续补充验收笔记。

本节小练

场记表全勾,备份项目。可演示,才算 Day5 杀青。

Lesson 10 · 总结

第五天,冲突落地。词典更新:

HP Hitbox 窗口 Hurtbox 受伤 死亡移除
独立敌人场景与 HP
玩家攻击可命中并防连扣
可击败敌人,键位与对话可共存
课程理念

战斗系统是欲望吸尘器。AI 会不断建议连招、BUFF、暴击。你要反复问:是否服务今日完成定义?不服务就记到以后。克制的导演,才做得出 Demo。

明天 Day6 把地图、角色、NPC、战斗串成完整可玩竖切片并打磨演示。缺哪块,明天先补哪块,再谈包装。

AI Prompt · 日复盘
我完成了 Godot 4 最小战斗。请给 Day6(完整 Demo)用的现状模板,并列出串联演示前最该修的 3 个风险(输入冲突、出生点、性能不必谈)。

五天骨架:地、人、话、打。明天是剪辑日:让四段变成一部可看短片。

口令本写下:攻击键、伤害值、敌人 max_hp、场景路径。数字是可重复的记忆。

标记完成前,确认口令本三行数字与两行路径已写。档案不齐不算收工。

请把本节要点写进口令本,并用一句话告诉自己明天要带着什么现状开工。

请把本节要点写进口令本,并用一句话告诉自己明天要带着什么现状开工。继续补充验收笔记。

请把本节要点写进口令本,并用一句话告诉自己明天要带着什么现状开工。继续补充验收笔记。继续补充验收笔记。

请把本节要点写进口令本,并用一句话告诉自己明天要带着什么现状开工。继续补充验收笔记。继续补充验收笔记。继续补充验收笔记。

请把本节要点写进口令本,并用一句话告诉自己明天要带着什么现状开工。继续补充验收笔记。继续补充验收笔记。继续补充验收笔记。继续补充验收笔记。

请把本节要点写进口令本,并用一句话告诉自己明天要带着什么现状开工。继续补充验收笔记。继续补充验收笔记。继续补充验收笔记。继续补充验收笔记。继续补充验收笔记。

请把本节要点写进口令本,并用一句话告诉自己明天要带着什么现状开工。继续补充验收笔记。继续补充验收笔记。继续补充验收笔记。继续补充验收笔记。继续补充验收笔记。继续补充验收笔记。

本节小练

口述:我怎样造成伤害、怎样判定死亡。说清再标记完成。

课堂练习

敌人可被攻击扣血并击败
同一次挥砍不重复疯狂扣血
对话中不会误触发攻击(或已明确仲裁)

今日作业

1)记录攻击键、伤害、max_hp。
2)截图:命中瞬间与敌人消失。
3)写一句:「我的防连扣策略是 ___。」

本日总结

战斗 = HP + 命中窗口 + 死亡。胜利条件:打得到,打得死,按键不打架。