名称: web-games
描述: Web浏览器游戏开发原则。框架选择、WebGPU、优化、PWA。
允许工具: 读取、写入、编辑、全局搜索、grep
Web浏览器游戏开发
框架选择和浏览器特定原则。
1. 框架选择
决策树
游戏类型?
│
├── 2D游戏
│ ├── 需要完整游戏引擎功能? → Phaser
│ └── 需要原始渲染能力? → PixiJS
│
├── 3D游戏
│ ├── 需要完整引擎(物理、XR)? → Babylon.js
│ └── 专注于渲染? → Three.js
│
└── 混合/Canvas
└── 自定义 → 原始Canvas/WebGL
比较 (2025)
| 框架 |
类型 |
最适合 |
| Phaser 4 |
2D |
完整游戏功能 |
| PixiJS 8 |
2D |
渲染、UI |
| Three.js |
3D |
可视化、轻量级 |
| Babylon.js 7 |
3D |
完整引擎、XR |
2. WebGPU采用
浏览器支持 (2025)
| 浏览器 |
支持 |
| Chrome |
✅ 自v113起 |
| Edge |
✅ 自v113起 |
| Firefox |
✅ 自v131起 |
| Safari |
✅ 自18.0起 |
| 总计 |
约73% 全球 |
决策
- 新项目: 使用WebGPU并备有WebGL回退
- 遗留支持: 从WebGL开始
- 功能检测: 检查
navigator.gpu
3. 性能原则
浏览器约束
| 约束 |
策略 |
| 无本地文件访问 |
资产捆绑、CDN |
| 标签页节流 |
隐藏时暂停 |
| 移动数据限制 |
压缩资产 |
| 音频自动播放 |
需要用户交互 |
优化优先级
- 资产压缩 - KTX2、Draco、WebP
- 懒加载 - 按需加载
- 对象池 - 避免垃圾回收
- 绘制调用批处理 - 减少状态更改
- Web Workers - 卸载重计算
4. 资产策略
压缩格式
| 类型 |
格式 |
| 纹理 |
KTX2 + Basis Universal |
| 音频 |
WebM/Opus (回退: MP3) |
| 3D模型 |
glTF + Draco/Meshopt |
加载策略
| 阶段 |
加载 |
| 启动 |
核心资产,<2MB |
| 游戏过程 |
流式按需加载 |
| 后台 |
预取下一级别 |
5. 游戏PWA
好处
要求
- 用于缓存的Service Worker
- Web应用清单
- HTTPS
6. 音频处理
浏览器要求
- 音频上下文需要用户交互
- 在首次点击/轻按时创建AudioContext
- 如果暂停,恢复上下文
最佳实践
- 使用Web Audio API
- 池音频源
- 预加载常见声音
- 使用WebM/Opus压缩
7. 反模式
| ❌ 不要 |
✅ 做 |
| 提前加载所有资产 |
渐进式加载 |
| 忽略标签页可见性 |
隐藏时暂停 |
| 阻塞音频加载 |
懒加载音频 |
| 跳过压缩 |
压缩一切 |
| 假设快速连接 |
处理慢网络 |
记住: 浏览器是最可访问的平台。尊重其约束。