一款浏览器原生 FPS 小游戏。所有美术资产——枪械、气球人角色、派对地图、贴图、战斗特效——全部在运行时由代码程序化生成,不依赖任何外部素材文件(不读取任何 .png/.jpg/.mp3/.obj)。
唯一的第三方文件是 vendor/ 里的 Three.js 引擎(WebGL 渲染库,属于引擎而非美术素材)。游戏已离线打包,断网也能跑。
需要通过 HTTP 服务器打开(因为用了 ES Module + importmap,不能直接双击 file://):
cd balloon-busters
python3 -m http.server 8765
# 浏览器打开 http://localhost:8765/点「开始游戏」→ 浏览器请求鼠标锁定 → 进入战斗。
| 操作 | 按键 |
|---|---|
| 移动 | W A S D |
| 瞄准 | 鼠标 |
| 射击(可按住连发) | 鼠标左键 |
| 冲刺 | Shift |
| 换弹 | R |
| 暂停 | Esc |
- 打爆一波又一波向你扑来的气球人。普通气球人 1 镖爆,大号气球人 3 镖爆、得分更高。
- 被靠近会受伤,画面边缘红光闪烁;脱战 4 秒后自动回血。
- 每波清空后短暂间歇,下一波数量更多、出现大号敌人。
- 贴图:
<canvas>绘制天空渐变、派对棋盘地板、彩色条纹墙、礼物盒包装、径向辉光,再转成THREE.CanvasTexture。 - 气球人:球体头 + 胶囊身体 + 节点绳结 + 两段四肢,配眨眼高光、微笑嘴;走路时四肢摆动、整体弹性飘浮。
- 派对枪:橙色枪身、青色枪管、黄色枪口环、握把、扳机、顶部气球装饰;带枪口火光(加法混合 Sprite)、后坐力、走动摇摆、换弹下沉旋转动画。
- 地图:棋盘地面 + 四面粉彩墙 + 礼物盒掩体(带缎带蝴蝶结)+ 气球柱 + 高空漂浮装饰气球。
- 战斗特效:InstancedMesh 彩纸雨(带物理下落/反弹/自旋)、加法混合爆破光环、飞镖拖光弹道。
- 音效:Web Audio API 用振荡器 + 噪声 buffer 合成射击/爆破/受伤/换弹/冲刺/波次/游戏结束音。
- HUD:准星 + 命中标记、分数/波次/击杀、血条、弹药数、冲刺冷却环、波次横幅、受伤暗角。
balloon-busters/
├── index.html # 全部游戏代码(单文件,~1240 行)
├── vendor/ # Three.js 引擎(离线副本,非美术素材)
│ ├── three.module.js
│ └── controls/PointerLockControls.js
└── README.md