2D 网页塔防 · 第一关可玩

钢铁洪流:诺曼底

一款二战题材的 2D 网页塔防游戏。玩法骨架 1:1 对齐《王国保卫战》—— 四类防御工事、护甲与穿甲、提前召唤奖励、波次教学、英雄与技能; 换掉的只是题材、美术与叙事外壳。

引擎 Phaser 3 语言 TypeScript 构建 Vite 关卡 第一关《滩头阵地》 波次 10 波 素材 100% 自制

01项目概览

这是一个"换皮不换骨"的复刻实验:先系统调研《王国保卫战》的玩法机制与美术语言, 再把这套骨架完整移植到二战诺曼底滩头的题材上,从素材生成到关卡平衡全部自研。

4
防御工事类型
4
每类升级层级(含二选一专精)
6
敌军兵种 + 1 个坦克 Boss
3
可选英雄,各带 2 个技能
10
波次,含 1 场坦克战
8
建造位
265
初始金币 / 20 点生命
1.9MB
首屏资源总量
设计原则:《王国保卫战》的乐趣不在题材,而在"路线判断 + 资源取舍 + 波次节奏"。 因此本项目严格保留它的数值结构和操作手感,只替换叙事、单位命名、美术风格与音效。

怎么玩

  • 敌人沿固定路线从右上角向内陆推进,走到底就会扣减生命;生命归零即失败。
  • 在沙袋平台上花金币建造工事,工事自动开火;击杀敌人获得金币。
  • 工事可以逐级升级,满级后从两个专精方向里二选一,路线不可逆。
  • 步兵班和英雄会主动拦住路过的敌人,被拦住的敌人停下来互殴。
  • 两个战场技能:舰炮火力支援(大范围穿甲轰炸)与空投伞兵(临时增援)。
  • 波次间隙可以提前召唤下一波,换取额外金币奖励。

02玩法拆解:与原作的对应关系

原作的四类塔各有明确分工,靠"护甲类型"形成克制闭环。本项目完全沿用这套结构, 只是把名字换成了二战编制。

原作职能本作工事核心特性克制对象
弓箭手塔重机枪阵地高射速、单体、便宜无甲步兵、轻装单位
法师塔重型高炮阵地(88 炮)穿甲、射程远、射速慢装甲单位
炮兵塔重炮阵地(榴弹炮)溅射伤害、对群体强成群的步兵
兵营步兵班阵地派出士兵拦路、可移动集结点拖住敌人给火力塔争取时间

护甲:整个数值系统的支点

敌人分"无甲 / 轻甲 / 重甲"三档,护甲只减免非穿甲伤害。 这让玩家必须混编,而不是堆一种塔通关——这正是原作最核心的设计。

护甲类型非穿甲伤害承受穿甲伤害典型敌军
无甲100%100%步兵、侦察兵
轻甲70%100%掷弹兵、火焰兵
重甲40%100%装甲掷弹兵、四号坦克

波次节奏:把教学藏在关卡里

原作从不弹教程,靠波次自然教玩家。本作沿用同样的思路: 第 1 波只有步兵,逼你学会建机枪阵地;第 3 波出现轻甲,逼你学会升级; 中段引入火焰兵和装甲掷弹兵,逼你补高炮;第 10 波用四号坦克做小 Boss, 并在同一波解锁舰炮支援。

第一关波次节奏与敌军构成图
第一关《滩头阵地》的十波节奏与敌军构成
第一关路线与建造位布局图
路线、8 个建造位与敌军出生点 / 基地位置

03实机画面

以下均为游戏内实际运行截图(1280×720),非概念图。

游戏实机战斗画面
实机战斗:满编防线、Lv4 专精工事、右下角正在交战的英雄, 以及工事信息面板(伤害 / 射速 / 射程 / 溅射半径 / 拆除返还)。

概念设计图

开发前先产出概念图确定风格基调,再按同一套规范生成游戏内素材。

战斗画面概念图
战斗画面概念图
防御工事设定图
防御工事设定图
敌军单位设定图
敌军单位设定图

英雄

英雄不占建造位,可以随时被指挥到任意位置,阵亡后原地等待重生; 击杀敌人获得经验,等级提升会强化血量、伤害与技能强度。

三名可选英雄
米勒中士(游骑兵)/ 科瓦奇下士(狙击手)/ 阿德里安(战地医护)
近战 · 突击

米勒中士

站在路面上拦截敌人,最多同时挡住 2 个目标。
手雷:抛掷后范围穿甲爆炸。
冲锋:短时间大幅加速并撞开沿途敌人。

远程 · 穿甲

科瓦奇下士

射程 320 的穿甲步枪,优先攻击血量最高的目标。
精准射击:对指定区域最强目标造成极高穿甲伤害。
伪装:短时间不会被敌人锁定。

辅助 · 治疗

阿德里安

不会主动拦路,负责维持整条防线。
战地救护:范围内所有友军(含英雄)回血。
烟幕:在指定区域制造减速烟幕。

04开发过程

整个项目按"调研 → 策划 → 概念图 → 开发 → 验证 → 整理"的顺序推进, 每一步都留下了可交付的文档或产物。

阶段一

调研《王国保卫战》

通读官方 Wiki 的玩法、升级、塔、敌人与第一关数据,并实际读取官方游戏截图 逐项拆解美术语言(俯视 3/4 视角、粗描边卡通、配色层级、单位比例、拟声浮字、UI 造型)。 产出《王国保卫战深度调研报告》。

阶段二

策划与数值设计

确定"换皮不换骨"路线,写出完整策划方案:四类工事的四级升级树与二选一专精、 六种敌军的护甲与数值、十波节奏表、调色盘与美术规范、UI 布局、技术选型。

阶段三

概念图与风格定调

先出战斗画面、塔设定、敌人设定、关卡地图、UI 五张概念图,确定配色和视角, 再进入素材批量生产。

阶段四

工程搭建与素材生产

搭建 Vite + TypeScript + Phaser 3 骨架;用图像生成模型批量产出 57 张游戏素材, 用脚本合成 14 组程序化音效;数据驱动关卡(路径、建造位、波次全部是配置)。

阶段五

开发与逐项验证

实现路径系统、四类工事、弹道与伤害结算、步兵拦截、波次调度、技能、UI 与结算。 每一步都在真实浏览器里跑起来验证,而不是只看代码。

阶段六

玩法打磨

根据反馈重做路线(直线改样条曲线)、加入步兵班集结点移动、加入英雄系统, 并把首屏资源从 16.5MB 压到 1.9MB。

开发中修掉的关键缺陷

这些都是"跑起来才暴露"的问题,记录下来作为经验沉淀:

UI 与地图的点击穿透

UI 场景的按钮和关卡场景同屏时,一次点击会被两边同时消费。解决方式是 UI 记录点击时间戳,关卡场景在 80ms 内忽略点击。

容器子对象的坐标系

加入 Container 的游戏对象,坐标会变成相对容器的局部坐标。用绝对坐标创建再塞进容器,整个 HUD 会被推到屏幕外。

攻击计时器不递减

近战英雄的攻击间隔时钟被"提前 return"跳过,导致一辈子只能打一下。所有单位的时间轴都必须无条件推进。

溅射重复计伤

直击目标又被溅射范围算了一次,伤害翻倍。范围伤害必须排除已经被直击命中的目标。

素材贴图未注册

英雄图片生成了但没加进预加载清单,运行时不报错,只是贴图显示为空——必须逐个对象检查 texture key。

经验结算来源错误

最初只要敌人死亡英雄就加经验,等于挂机也能升级。改为记录"最后一击来源",只有英雄击杀才计入。

05美术与素材管线

全部素材自制,不采购、不扒图。分三层生产:AI 生成基础贴图、脚本合成音效、构建期自动压缩。

第一层:AI 生成贴图

向图像模型提交"目标画在纯洋红色背景上、不要阴影、正侧视"的提示词, 拿到图之后用色度键抠出透明背景,再统一缩放导出。

为什么要色度键而不是直接要求"透明背景": 生成模型输出的"透明"往往只是画了棋盘格图案,或者边缘带一圈脏色。 指定一个绝对不会出现在目标物上的高饱和背景色,再按颜色距离抠除, 边缘质量更可控,也更容易批量化。
提示词骨架:
  <主体描述>,
  drawn on a flat pure magenta (#FF00FF) background,
  no shadow, no ground, no text,
  game sprite, clean thick dark outline, cartoon vector style,
  side view, centered, aspect ratio 1:1

第二层:程序化音效

枪声、爆炸、脚步、金币、升级等 14 组音效全部用 Python 合成—— 噪声包络模拟枪炮,正弦扫频模拟提示音,再叠加低通滤波和衰减曲线。 好处是零版权风险、体积极小、可以精确调参。

第三层:构建期压缩

PNG 贴图统一转 WebP(有损,保留 alpha),WAV 音效转 OGG 主用 + MP3 兜底, 并把不再需要的中间产物清出仓库。

游戏素材总览
游戏内全部贴图素材总览

06技术架构

选用 Phaser 3 + TypeScript + Vite:Phaser 的 Sprite / Tween / 物理与音频系统足够覆盖塔防的全部需求, 打包后是一个纯静态站点,任何静态托管都能直接跑。

表现层

双场景叠加

LevelScene 负责战场与实体,UIScene 负责 HUD、面板与结算,两层通过事件总线通信,互不直接引用。

逻辑层

数据驱动关卡

路径控制点、建造位、装饰物、波次编成全部写在配置里,换关卡只改数据不改代码。

抽象层

统一的拦截者接口

士兵、伞兵、英雄都实现同一套拦截接口,敌人只依赖接口,因此英雄可以无缝接入拦截与伤害系统。

技术架构图
场景划分、核心系统与数据流

目录结构

td_game_manus_v1/
├─ game/                 Vite + Phaser 3 工程
│  ├─ src/
│  │  ├─ core/           路径系统、事件总线
│  │  ├─ data/           关卡、单位、英雄数值(纯数据)
│  │  ├─ objects/        敌人、士兵、英雄、弹道、工事
│  │  ├─ scenes/         预加载、关卡、界面
│  │  ├─ fx/             特效工厂
│  │  └─ audio/          音效管理
│  └─ public/assets/     贴图(WebP)与音效(OGG/MP3)
├─ tools/                素材生成与优化脚本
├─ design/               概念图与设计图
├─ docs/                 调研报告与策划方案
├─ showcase/             本演示页
└─ skills/               沉淀出的开发技能

07加载性能优化

第一版打开页面要等很久,实测首屏资源高达 16.5MB。下面是完整的优化过程和结果。

优化项做法收益
贴图格式PNG → WebP(有损,保留 alpha)体积降到约 1/8
音效格式WAV → OGG 主用 + MP3 兜底体积降到约 1/12
冗余资源清理不再使用的中间产物与未压缩源图去掉约 2MB
加载体验预加载进度条 + 全部资源一次性加载后再进关避免中途卡顿
渲染WebGL 渲染,静态背景预合成为单张图减少绘制调用
16.5MB
优化前首屏资源
1.9MB
优化后首屏资源
-88%
体积下降
还能继续优化:把背景图切成 1024×1024 的纹理图集、 对非首屏资源做按需加载、给静态资源加长效缓存头, 预计还能再降 30%~40%。这些已列入后续计划。

08后续开发规划

第一关验证了玩法骨架,下一步是把它做成一个可持续扩展的多阵营战役。 完整的路线图与英雄设计见 《后续开发策划》。

近期

第一关优化版

路线增加更多战术分支与高低差、步兵班可主动移动与换防、工事开火与命中的表现升级、背景细节与光照层次加强。

近期

英雄系统扩展

英雄选择界面、更多英雄、技能升级树、英雄专属装备,以及英雄与工事之间的联动加成。

中期

多阵营战役

每个阵营独立的第一关与专属工事、敌军、英雄。盟军诺曼底、东线、北非、太平洋各自成章。

中期

关卡编辑器

把数据驱动关卡开放出来,用可视化工具摆放路径与建造位,让新关卡可以脱离代码生产。

阅读完整后续策划