cocos微信小程序游戏开发技能点学习计划
Cocos Creator 3.x 引擎系统进阶学习路线(12周)
前提:已掌握 TS 基础、Node/Component 生命周期、能独立做简单小游戏。本路线聚焦工程化、性能、内存、框架封装,不覆盖入门操作。
版本:Cocos Creator 3.8.x,目标平台微信小游戏。
第1周:资源系统进阶(生命周期与分包)
学习目标
- 吃透 assetManager 的加载、缓存、释放链路,能定位内存泄漏
- 掌握引用计数 addRef / decRef 的手动管理时机
- 掌握分包加载与远程资源热更前置能力
核心知识点
resources.load/assetManager.loadAny的加载管线与版本配置- 自动释放 vs 手动释放:场景切换后哪些资源会被自动回收
Asset.addRef()/decRef()与内存泄漏的关系- 图集 SpriteAtlas 的依赖资源(SpriteFrame)引用链
- 分包配置:主包 / 分包 / 远程包的加载策略
loadRemote远程图片与缓存清理
练习 Demo:资源加载器封装
- 写一个
ResManager单例,封装load / loadDir / release / releaseAll - 支持按模块(UI / 音效 / 场景)分组释放
- 加载一个预制体 → 实例化 → 延迟销毁 → 主动释放资源,在微信开发者工具 Memory 面板观察纹理是否被回收
验收标准
- 能解释为什么直接
destroy(node)后纹理还在内存中 - 能写出正确释放一个 Prefab 及其依赖纹理的代码
- 配置一个分包,主包启动时不加载分包资源,进入对应界面时才加载
- Demo 连续进出场景 10 次,内存曲线不持续上涨
第2周:节点组件架构与对象池
学习目标
- 摆脱"一个脚本写到底",建立可维护的组件化架构
- 掌握对象池解决频繁实例化开销
核心知识点
- 节点树查找的性能代价:
find()vs 缓存引用 - 组件间通信的三种方式:直接 getComponent / 节点事件 / 全局事件总线
NodePool对象池:创建、获取、回收、预热- 预制体实例化
instantiate的开销与适用场景 - 节点 active 切换 vs destroy 的性能差异
练习 Demo:子弹/掉落物对象池
- 实现一个
ObjPool<T>通用对象池组件 - 生成 200 个移动的子弹,用池化方式复用,禁止每帧
instantiate - 对比池化前后帧率(在微信开发者工具 Performance 面板查看)
验收标准
- 1 秒内生成 100 个对象不卡顿,GC 次数明显下降
- 对象回收时正确重置状态(位置、旋转、透明度、事件监听)
- 能说出直接 instantiate 在小游戏低端机上的问题
第3周:UI 框架与列表复用
学习目标
- 搭出可复用的 UI 框架:弹窗栈、界面基类、自动适配
- 掌握 ScrollView 高效复用(这是小游戏列表性能关键)
核心知识点
- UI 基类设计:
onOpen / onClose / onShow / onHide生命周期 - 弹窗管理器:弹窗栈、遮罩、模态队列、关闭回调
- Widget 锚点适配与安全区(刘海屏)
- ScrollView + Layout 普通模式 vs 列表虚拟滚动
GridLayout与列表项预制体复用- Label 文字排版、RichText 性能开销
练习 Demo:完整 UI 框架 + 长列表
- 实现
UIManager:open(prefabPath)/close(uiName)/closeAll - 实现一个 1000 条数据的排行榜列表,滚动不卡顿(用复用而非全量创建)
- 做一个多层弹窗叠加:主界面 → 弹窗A → 弹窗B → 关闭B回到A
验收标准
- 列表滚动 60fps(中低端机),节点数量保持在屏幕可见项附近
- 弹窗打开关闭有统一动画和回调,不出现层级错乱
- 切换不同分辨率设计稿,UI 不错位、不被刘海遮挡
第4周:动画系统进阶
学习目标
- 掌握 Tween 链式编排与动画状态机,不依赖手动写帧动画
- 理解 Animation 组件的状态控制与事件
核心知识点
tween链式 API:sequence / parallel / repeat / delay / call- Tween 的 stop / pause / resume 与 target 引用管理
- Animation 组件:
play / crossFade / stop,动画状态切换 - 动画事件(Animation Event)回调到脚本
- Spine 骨骼动画基础(如角色需要):动画混合、插槽控制
- 动效性能:避免每帧修改 color / position 触发过度渲染
练习 Demo:游戏开场动效编排
- 用 Tween 编排:Logo 缩放入场 → 文字淡入 → 按钮弹起 → 可跳过
- 实现一个角色待机/移动/受伤三个 AnimationClip 的状态切换
- 给按钮做统一的按压缩放动效(可复用组件)
验收标准
- 动效时序精确,能在中途跳过且不残留状态
- 动画切换无突兀跳变(用 crossFade)
- 关闭界面时正确停止 Tween,防止回调操作已销毁节点
第5周:输入系统与手势
学习目标
- 脱离 Button 组件,处理复杂触摸手势与多点触控
- 掌握坐标转换,适配不同分辨率
核心知识点
- 触摸事件:
TOUCH_START / MOVE / END / CANCEL - 事件冒泡与捕获,
swallowTouches的作用 - 屏幕坐标 → UI 坐标 → 世界坐标的转换
- 手势识别:点击、长按、滑动方向、双指缩放
- 多点触控:touch id 跟踪
- 微信小游戏:触摸事件与鼠标事件的差异
练习 Demo:拖拽拼图 / 摇杆控制
- 实现一个可拖拽的物体,跟随手指,松手有回弹
- 实现一个虚拟摇杆:控制角色移动方向和速度
- 实现双指缩放一个图片
验收标准
- 拖拽跟手,无明显延迟,快速滑动不丢失 touch
- 摇杆有死区和最大半径,输出方向向量正确
- 在不同分辨率手机上,触摸坐标映射正确
第6周:事件总线与架构模式
学习目标
- 建立模块间解耦通信,避免节点互相引用导致的强耦合
- 掌握常用游戏架构模式在 Cocos 中的落地
核心知识点
EventTarget全局事件总线:on / off / emit / targetOff- 事件监听的生命周期:onLoad 监听,onDestroy 必须移除
- 命令模式 / 消息队列:UI 事件 → 命令 → 逻辑处理
- 单例管理器设计:GameManager / DataManager / AudioManager
- MVC 思想:数据、视图、逻辑分离
- 防止事件泄漏:组件销毁后仍收到事件导致报错
练习 Demo:全局事件通信
- 实现一个
EventBus单例 - 战斗逻辑层发出
SCORE_CHANGE事件,UI 层监听并刷新分数,两者不直接引用 - 实现一个简单的命令队列:点击按钮 → 执行命令 → 广播结果
验收标准
- 关闭任意界面后,该界面注册的事件全部移除(无残留监听)
- 模块之间不出现
getComponent跨层硬引用 - 能解释为什么节点销毁后不移除监听会报错
第7周:音频系统与微信适配
学习目标
- 掌握音频池与动态加载,解决微信小游戏音频常见问题
- BGM 与音效分离管理
核心知识点
AudioSource组件 vsaudioManager接口- 音效池:多个相同音效同时播放(如连续射击)
- BGM 循环、淡入淡出、切换
- 微信小游戏音频限制:必须由用户手势触发才能播放
- 音频格式:mp3 vs wav 的包体与性能权衡
- 静音开关与音量持久化
练习 Demo:音频管理器
- 实现
AudioManager:playMusic / playSound / stopAll / setVolume - 音效对象池:同时播放多个射击音效不互相打断
- 处理微信:首次点击屏幕后才解锁音频
验收标准
- 连续快速点击按钮,音效叠加播放不卡顿
- 切后台 BGM 暂停,回前台恢复
- 重启游戏后音量设置保留
第8周:数据驱动与存档系统
学习目标
- 用配置表驱动游戏数值,不硬编码
- 掌握存档读写、版本迁移、数据保护
核心知识点
- JSON 配置表加载:
resources.load加载 JsonAsset - 数据管理器:全局单例管理玩家数据
sys.localStorage读写与序列化- 存档版本号:版本升级时旧存档迁移
- 数据加密(可选):防止简单篡改
- 脏数据标记:哪些数据变化了需要写盘(避免频繁 IO)
练习 Demo:玩家数据系统
- 设计一个
PlayerData:金币、最高分、关卡进度、设置项 - 实现
DataManager:load / save / reset / 自动存档 - 做一个关卡配置表(JSON),从配置读取关卡参数,改配置不改代码
验收标准
- 杀进程重进游戏,数据完整恢复
- 修改配置表后,不改动脚本即可改变关卡数值
- 存档损坏时有兜底(读默认值),不白屏
第9周:渲染性能优化
学习目标
- 能定位并解决 DrawCall、过度绘制、纹理内存问题
- 这是微信小游戏包体和帧率达标的关键
核心知识点
- DrawCall 概念:为什么合图能减少 DrawCall
- SpriteAtlas 图集规划:按界面/模块打包,避免全量图集
- 动态合图 vs 静态图集的适用场景
- 过度绘制:半透明遮罩叠加层数
- 纹理格式:ETC2 / ASTC 压缩,包体与内存
- 节点数量优化:不可见节点及时 active = false
- 微信开发者工具:DrawCall、FPS、内存面板使用
练习 Demo:性能对比优化
- 做一个有 50 个 Sprite 的界面,先散图后合图,对比 DrawCall
- 找出一个过度绘制严重的界面(多层半透明),优化层数
- 用 ASTC 压缩纹理,对比包体大小
验收标准
- 能在开发者工具中读出当前场景 DrawCall 数
- 同屏 100 个同图集 Sprite,DrawCall 保持低位
- 主包纹理内存控制在微信限制内(通常 ≤ 150MB 运行内存)
第10周:物理系统进阶(2D)
学习目标
- 掌握 2D 物理的碰撞过滤、传感器、物理调试
- 理解物理与游戏逻辑的解耦
核心知识点
- RigidBody2D 三种类型:dynamic / static / kinematic
- Collider2D:Box / Circle / Polygon,传感器(isSensor)
- 碰撞回调:
onBeginContact / onEndContact,碰撞对象信息 - 碰撞分组与掩码:group / category,避免不必要碰撞
- 物理材质:摩擦、弹性
- 物理调试绘制:
PhysicsSystem2D.instance.debugDrawFlags - 物理更新时机:
fixedUpdatevsupdate
练习 Demo:碰撞检测游戏
- 实现一个角色(kinematic)与多个障碍物(static)碰撞
- 用传感器触发"进入区域"事件,而非物理阻挡
- 配置碰撞分组:玩家只与敌人碰撞,不与背景碰撞
验收标准
- 碰撞回调能正确拿到双方节点并执行逻辑
- 传感器触发不产生物理反弹
- 开启调试绘制,碰撞体形状与视觉一致
第11周:网络层与实时通信
学习目标
- 封装统一请求层,处理超时、重试、错误码
- 了解 WebSocket 长连接基础
核心知识点
fetch/wx.request的 Promise 封装- 请求拦截:统一加 token、loading、错误提示
- 错误码处理:登录失效、网络断开、超时
- WebSocket:连接、重连、心跳、消息分发
- 协议选择:JSON vs protobuf(小游戏包体敏感)
- 微信小游戏:必须 https / wss,域名白名单配置
练习 Demo:网络管理器
- 封装
HttpManager:get / post,统一错误处理 - 实现一个简单的 WebSocket 连接:断线自动重连 + 心跳
- 请求一个远程配置接口,失败时有重试
验收标准
- 断网时请求有友好提示,不卡死
- WebSocket 断开后能自动重连
- 所有请求走统一入口,不散落
wx.request
第12周:微信小游戏专项与发布
学习目标
- 完成从开发到上传的全流程,处理平台特有限制
- 掌握分包、广告、性能监控
核心知识点
- 构建发布:微信小游戏构建选项、资源服务器配置
- 主包 4M 限制:分包策略、远程资源
- 微信登录:
wx.login→ code → 后端换 session - 激励视频广告:加载、播放、关闭回调、失败兜底
- 插屏广告、Banner 广告
- 开放数据域:好友排行榜(独立子域)
- 性能监控:
wx.getPerformance、错误上报 - 审核注意事项:隐私协议、类目、内容合规
练习 Demo:可上传的完整小游戏
- 选一个前面做过的 demo,配置分包:主包只放启动和首页,其余进分包
- 接入一个激励视频广告:看广告复活 / 得奖励
- 配置微信登录,获取 openid(可模拟)
- 上传体验版,在真机测试
验收标准
- 主包体积 ≤ 4M,分包按需加载
- 广告加载失败时有兜底逻辑(不卡死游戏)
- 真机测试:启动时间、帧率、内存无明显异常
- 能走通上传 → 提审流程(不要求真过审)
配套交付物清单(每周产出)
| 周次 | 产出物 |
|---|---|
| 1 | ResManager 封装 + 内存对比截图 |
| 2 | 通用对象池 + 帧率对比 |
| 3 | UIManager + 可复用列表组件 |
| 4 | 动效编排脚本 + 状态切换 |
| 5 | 拖拽/摇杆组件 |
| 6 | EventBus + 模块解耦 demo |
| 7 | AudioManager |
| 8 | DataManager + 配置表 |
| 9 | 优化前后 DrawCall 对比 |
| 10 | 物理碰撞 demo |
| 11 | HttpManager + WebSocket 封装 |
| 12 | 可上传的微信小游戏工程 |
学习建议
- 每周一个可运行 demo,不要只看文档;每周末用微信开发者工具真机自测一次。
- 第 1、3、9、12 周是微信小游戏上线的硬骨头,建议多花时间。
- 遇到问题优先查 Cocos 官方 API 文档和微信小游戏官方文档,第三方博客版本可能滞后。