微信小游戏开发速查卡
🚀 快速开始
构建命令
# PowerShell(Windows)
.\build-wechat.ps1 -Version "1.0.0"
# Batch(Windows)
build-wechat.bat
# Cocos Creator CLI
cocos build --platform wechatgame --output ./build/wechatgame
真机测试
- 微信开发者工具 → 点击「预览」
- 扫描二维码
- 在手机上测试功能
📦 包体限制
| 项目 |
限制 |
检查命令 |
| 主包大小 |
≤ 20 MB |
ls -lh build/wechatgame |
| 总包大小 |
≤ 200 MB |
同上 |
| 代码文件大小 |
≤ 8 MB |
检查 game.js |
| 单次加载资源 |
≤ 10 MB |
监控内存 |
🔑 常用微信 API
系统信息
const info = wx.getSystemInfoSync();
console.log(info.model); // 设备型号
console.log(info.system); // 操作系统版本
console.log(info.platform); // 平台
console.log(info.memoryUsage); // 内存使用
数据存储
// 同步存储
wx.setStorageSync('key', 'value');
const value = wx.getStorageSync('key');
wx.removeStorageSync('key');
// 异步存储
wx.setStorage({
key: 'key',
data: 'value',
success: () => console.log('保存成功')
});
广告 API
// 激励视频广告
const rewardedAd = wx.createRewardedVideoAd({
adUnitId: 'adunit-xxxxxxxx'
});
rewardedAd.onClose((res) => {
if (res.isEnded) {
// 观看完成,发放奖励
}
});
rewardedAd.show().catch(() => {
rewardedAd.load().then(() => rewardedAd.show());
});
// 插屏广告
const interstitialAd = wx.createInterstitialAd({
adUnitId: 'adunit-xxxxxxxx'
});
interstitialAd.show();
音频控制
// 监听音频中断
wx.onAudioInterruptionBegin(() => {
// 来电、通知等,暂停音频
});
wx.onAudioInterruptionEnd(() => {
// 中断结束,恢复音频
});
性能优化
// 设置目标帧率
wx.setPreferredFramesPerSecond(60);
// 主动触发 GC
wx.triggerGC();
// 数据上报
wx.reportAnalytics('event_name', {
key1: 'value1',
key2: 'value2'
});
🎨 资源规范
图片
| 类型 |
格式 |
尺寸 |
压缩 |
| UI 图标 |
PNG |
按需 |
TinyPNG |
| 背景图 |
JPG/WebP |
1920x1080 |
质量 80% |
| 水果贴图 |
PNG |
256x256 |
TinyPNG |
| 特效 |
PNG 序列帧 |
128x128 |
减少帧数 |
音频
| 类型 |
格式 |
比特率 |
声道 |
| BGM |
MP3 |
128kbps |
立体声 |
| SFX |
MP3 |
96kbps |
单声道 |
| Voice |
MP3 |
64kbps |
单声道 |
🐛 调试技巧
控制台日志
// 开发环境输出
console.log('[Debug] 消息');
console.warn('[Warning] 警告');
console.error('[Error] 错误');
// 生产环境禁用
if (!DEBUG_MODE) {
console.log = () => {};
}
性能监控
// FPS 监控
const fps = director.getScheduler().getFramesPerSecond();
// 内存监控
if (wx.getSystemInfoSync) {
const mem = wx.getSystemInfoSync().memoryUsage;
console.log(`内存: ${(mem / 1024 / 1024).toFixed(1)} MB`);
}
// Draw Calls
const drawCalls = director.root?.batcher?.queue?.length;
真机调试
- 微信开发者工具 → 「调试」→ 「打开调试」
- 手机会显示 vConsole 面板
- 查看日志、网络请求、性能数据
⚡ 性能优化速查
代码优化
// ✅ 使用对象池
const pool: Fruit[] = [];
function getFruit() {
return pool.pop() || new Fruit();
}
// ❌ 避免频繁创建
function badExample() {
const obj = { x: 1, y: 2 }; // 每帧创建
}
渲染优化
// ✅ 合并相同材质的 Sprite
batchNode.addChild(fruit1);
batchNode.addChild(fruit2);
// ✅ 隐藏不可见对象
node.active = false; // 而不是 opacity = 0
// ❌ 避免动态修改材质
内存管理
// 场景切换时清理
onDestroy() {
this.unscheduleAllCallbacks();
this.node.removeAllChildren();
resources.releaseAll();
if (wx.triggerGC) wx.triggerGC();
}
📊 关键指标
性能指标
| 指标 |
目标值 |
警戒值 |
| FPS |
60 |
< 45 |
| 启动时间 |
< 3s |
> 5s |
| 内存占用 |
< 200MB |
> 250MB |
| Draw Calls |
< 100 |
> 200 |
| 崩溃率 |
< 1% |
> 3% |
业务指标
| 指标 |
目标值 |
说明 |
| 次日留存 |
> 30% |
新用户第二天回来 |
| 7日留存 |
> 10% |
新用户第七天回来 |
| 平均时长 |
> 5min |
单次游戏时长 |
| 广告完成率 |
> 60% |
激励视频看完率 |
| eCPM |
> ¥50 |
千次展示收入 |
🔧 常见问题
Q: 广告不显示?
- 必须真机测试(模拟器不显示)
- 检查广告位 ID 是否正确
- 确认网络连接正常
- 检查网络权限
Q: 启动慢?
- 使用分包加载
- 延迟加载非核心资源
- 压缩图片和音频
- 减少首屏渲染元素
Q: 内存泄漏?
- 检查定时器是否清除
- 确认对象池正确回收
- 场景切换时释放资源
- 主动触发
wx.triggerGC()
Q: 帧率低?
- 减少同屏对象数量
- 合并 Draw Calls
- 降低粒子特效数量
- 优化碰撞检测算法
📞 支持资源
官方文档
社区
工具
🎯 上线清单
开发阶段
测试阶段
优化阶段
提审准备
发布后
祝开发顺利! 🚀