01项目概览
这是一个"换皮不换骨"的复刻实验:先系统调研《王国保卫战》的玩法机制与美术语言, 再把这套骨架完整移植到二战诺曼底滩头的题材上,从素材生成到关卡平衡全部自研。
怎么玩
- 敌人沿固定路线从右上角向内陆推进,走到底就会扣减生命;生命归零即失败。
- 在沙袋平台上花金币建造工事,工事自动开火;击杀敌人获得金币。
- 工事可以逐级升级,满级后从两个专精方向里二选一,路线不可逆。
- 步兵班和英雄会主动拦住路过的敌人,被拦住的敌人停下来互殴。
- 两个战场技能:舰炮火力支援(大范围穿甲轰炸)与空投伞兵(临时增援)。
- 波次间隙可以提前召唤下一波,换取额外金币奖励。
02玩法拆解:与原作的对应关系
原作的四类塔各有明确分工,靠"护甲类型"形成克制闭环。本项目完全沿用这套结构, 只是把名字换成了二战编制。
| 原作职能 | 本作工事 | 核心特性 | 克制对象 |
|---|---|---|---|
| 弓箭手塔 | 重机枪阵地 | 高射速、单体、便宜 | 无甲步兵、轻装单位 |
| 法师塔 | 重型高炮阵地(88 炮) | 穿甲、射程远、射速慢 | 装甲单位 |
| 炮兵塔 | 重炮阵地(榴弹炮) | 溅射伤害、对群体强 | 成群的步兵 |
| 兵营 | 步兵班阵地 | 派出士兵拦路、可移动集结点 | 拖住敌人给火力塔争取时间 |
护甲:整个数值系统的支点
敌人分"无甲 / 轻甲 / 重甲"三档,护甲只减免非穿甲伤害。 这让玩家必须混编,而不是堆一种塔通关——这正是原作最核心的设计。
| 护甲类型 | 非穿甲伤害承受 | 穿甲伤害 | 典型敌军 |
|---|---|---|---|
| 无甲 | 100% | 100% | 步兵、侦察兵 |
| 轻甲 | 70% | 100% | 掷弹兵、火焰兵 |
| 重甲 | 40% | 100% | 装甲掷弹兵、四号坦克 |
波次节奏:把教学藏在关卡里
原作从不弹教程,靠波次自然教玩家。本作沿用同样的思路: 第 1 波只有步兵,逼你学会建机枪阵地;第 3 波出现轻甲,逼你学会升级; 中段引入火焰兵和装甲掷弹兵,逼你补高炮;第 10 波用四号坦克做小 Boss, 并在同一波解锁舰炮支援。
03实机画面
以下均为游戏内实际运行截图(1280×720),非概念图。
概念设计图
开发前先产出概念图确定风格基调,再按同一套规范生成游戏内素材。
英雄
英雄不占建造位,可以随时被指挥到任意位置,阵亡后原地等待重生; 击杀敌人获得经验,等级提升会强化血量、伤害与技能强度。
米勒中士
站在路面上拦截敌人,最多同时挡住 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 渲染,静态背景预合成为单张图 | 减少绘制调用 |
09立场声明与免责声明
历史立场
- 轴心国是侵略者与战败国。本作中的轴心国部队被设定为反面势力, 其历史罪行(侵略战争、大屠杀、反人类暴行)在游戏内外均予以否定与谴责。
- 反法西斯同盟万岁。本作以反法西斯同盟视角展开叙事, 纪念所有为战胜法西斯而付出牺牲的人们。
- 本作不美化、不宣扬任何形式的纳粹主义、军国主义、法西斯主义或其符号、口号、标志。 所有美术素材均为原创绘制,不含任何被禁止或具有冒犯性的徽记、旗帜与文本。
- 游戏中的国家、部队、人物与事件均为艺术化虚构或简化处理, 不代表任何真实个人、组织或当代国家立场。
内容与版权
- 本作仅供娱乐与学习交流,非商业用途。
- 全部美术素材(贴图、概念图、UI)与音效均为本项目原创生成或程序化合成, 未使用任何第三方游戏的素材、代码或资源。
- 本作在玩法结构上参考并致敬《王国保卫战》(Kingdom Rush, Ironhide Game Studio), 但不包含其任何美术、音频、文本或代码资源,与 Ironhide Game Studio 无隶属或授权关系。
- 若权利人认为本作存在不妥之处,可通过仓库 Issue 联系,我们将及时调整或移除相关内容。
适用人群
- 本作含卡通化的战争场面(射击、爆炸、单位倒地),不含血腥、裸露或恐怖内容,建议 12 岁以上玩家游玩。
- 本作不包含内购、抽卡、广告或任何形式的付费内容,也不收集玩家个人数据。