外观
LevelUp|课程总纲(融合版)
版本定位:以 Cocos Creator 2.4.x 为主线,从 Creator 业务开发逐步进入引擎运行机制、资源系统、渲染、性能、JSB 与 Modern C++,再根据职业方向进入引擎专项或 C++ 服务端专项。
一、课程目标
这套课程不以记忆 API 或逐行背源码为目标,而是建立一条可以用于开发、排错和优化的完整认知链:
text
业务代码
↓
Node / Component 状态变化
↓
生命周期与 Engine Loop 调度
↓
Scene / Prefab / Asset 运行时对象
↓
Transform / Renderer
↓
CPU / GPU / Memory
↓
JavaScript Engine / JSB / C++完成公共主线后,应具备以下能力:
- 能解释常用 Creator API 背后的运行流程。
- 能判断逻辑发生在业务层、引擎层、资源层、渲染层还是原生层。
- 能使用证据定位帧率、卡顿、内存和加载问题。
- 能沿调用链阅读相关引擎源码,而不是盲目搜索答案。
- 具备继续学习 Cocos 引擎、实时渲染或 C++ 服务端的共同基础。
二、版本与内容边界
- 主线版本固定为 Cocos Creator 2.4.x。
- 2.0~2.3 与 2.4 的 API 差异在对应课程中单独标注。
- Creator 3.x 只作为迁移对照,不混入 2.x 主流程。
- 源码用于验证执行链和设计原因,不要求记忆内部私有 API。
- Scene、Prefab、动画等序列化资源只讲原理和编辑器操作,不要求手工修改序列化文件。
.meta与 UUID 只讲 AssetDB 生成、引用和迁移机制,不手工伪造或修改 UUID。
三、总体路线
text
Phase 1|Cocos 公共核心
Stage01 Creator2x Foundation
→ Stage02 Engine Loop
→ Stage03 Runtime Objects & Assets
→ Stage04 Renderer
→ Stage05 Performance
→ Stage06 JSB & Native Bridge
Phase 2|共同的 C++ 基础
Stage07 Modern C++ Foundation
Phase 3|职业方向专项(可选一条,也可先后完成)
路线 A:Engine Architecture → Advanced Rendering → Advanced Performance
路线 B:Linux → Network → Server Engineering → Database → Game Server公共核心先解决“Creator 为什么这样运行”,Modern C++ 解决“底层代码如何表达这些机制”,专项阶段再决定继续深入客户端引擎还是服务端工程。
四、课程状态与仓库约定
实际课程目录:
text
docs/002-cocos/进阶课程/当前状态:
text
Lesson001 ~ Lesson010:已完成
Lesson011:已完成
Lesson012 ~ Lesson021:补强完成
Lesson022 ~ Lesson036:重写完成
Lesson037 ~ Lesson054:重写完成
Lesson055 ~ Lesson072:重写完成
Lesson073 ~ Lesson080:重写完成
Lesson081 ~ Lesson095:已完成
全部 Lesson012 ~ Lesson095 已按正式课程标准完成或补强约定:
- 已完成课件不重新编号、不覆盖主题。
- 后续文件延续
LNNN-中文标题.md的现有形式。 - 当前
02_Egine_Loop目录名按仓库现状记录;如需纠正拼写,应单独迁移并检查站内链接。 - 后续课程允许根据实际内容拆分或合并,但只调整尚未开始的课程。
- 每个阶段最后安排综合复盘,形成从输入到输出的完整数据流。
Phase 1|Cocos 公共核心
Stage01|Creator2x Foundation(Lesson001~010)
状态:已完成
阶段目标:从 API 使用思维转向引擎数据流思维,理解 Node、Component、Transform、Matrix、生命周期和运行状态。
- Lesson001|为什么 Cocos Creator 开发者必须理解 C++
- Lesson002|
this.node.x = 100到底发生了什么 - Lesson003|什么是 World Matrix
- Lesson004|Transform 为什么要分 position、rotation、scale
- Lesson005|Node 到底是什么,为什么它是 Creator 的核心
- Lesson006|Component 是什么,为什么逻辑要挂在组件上
- Lesson007|Node 和 Component 为什么要分开
- Lesson008|onLoad、start、update 到底什么时候执行
- Lesson009|active、enabled、destroy 的区别
- Lesson010|阶段复习:从 API 到引擎数据流
阶段产出:
text
API 调用
→ Node / Component 数据变化
→ Dirty Flag / activeInHierarchy / enabled
→ 生命周期、update、事件和渲染受到影响Stage02|Engine Loop(Lesson011~021)
阶段目标:看懂游戏从启动、加载场景到每帧结束的完整调度过程。
- Lesson011|
cc.game启动后发生了什么(已完成) - Lesson012|
Director.mainLoop:一帧到底怎么跑(已完成) - Lesson013|Director 是什么,为什么它是引擎调度中心(已完成)
- Lesson014|Scene 是什么,加载和切换场景时发生了什么(已完成)
- Lesson015|Scheduler 和 ComponentScheduler 分别负责什么(已完成)
- Lesson016|组件生命周期如何注册、启用和移出调度队列(已完成)
- Lesson017|update、lateUpdate 与 executionOrder(已完成)
- Lesson018|active、activeInHierarchy、enabled 在当前帧如何改变调度(已完成)
- Lesson019|schedule、Action、Tween、Animation 的时间由谁推进(已完成)
- Lesson020|dt、FPS、pause、resume 与 timeScale(已完成)
- Lesson021|阶段复习:从游戏启动到一帧结束(已完成)
阶段重点数据流:
text
cc.game.run
→ Director
→ Scene
→ ComponentScheduler / Scheduler
→ update / lateUpdate
→ Transform / Render
→ deferredDestroy
→ 下一帧Stage03|Runtime Objects & Assets(Lesson022~036,重写完成)
阶段目标:理解编辑器中的 Scene、Prefab 和资源如何变成运行时对象,以及这些对象如何加载、引用、缓存和释放。
- Lesson022|Scene 和 Prefab 的序列化数据如何还原成运行时对象(重写完成)
- Lesson023|UUID、
.meta、AssetDB 和属性引用是什么关系(重写完成) - Lesson024|
instantiate一个 Prefab 时发生了什么(重写完成) - Lesson025|Prefab 实例、属性覆盖与组件引用(重写完成)
- Lesson026|场景切换、常驻节点与对象生命周期(重写完成)
- Lesson027|节点事件的捕获、目标和冒泡(重写完成)
- Lesson028|触摸命中、事件遮挡与坐标转换(重写完成)
- Lesson029|编辑器导入系统与运行时资源系统的区别(重写完成)
- Lesson030|
resources.load/loadRes背后的加载流程(重写完成) - Lesson031|异步加载、预加载、进度和回调竞态(重写完成)
- Lesson032|资源依赖图、缓存与引用关系(重写完成)
- Lesson033|Texture、SpriteFrame、Atlas 为什么不是同一个对象(重写完成)
- Lesson034|Asset Bundle、远程资源、CDN 与版本管理(重写完成)
- Lesson035|为什么 destroy 节点不等于释放资源(重写完成)
- Lesson036|阶段复习:从磁盘资源到运行时对象,再到安全释放(重写完成)
阶段重点数据流:
text
源文件
→ AssetDB 导入
→ UUID 与依赖关系
→ Bundle / Loader
→ Asset 缓存
→ Scene / Prefab 实例
→ Node / Component 使用
→ 解除引用与释放Stage04|Renderer(Lesson037~054,重写完成)
阶段目标:理解“修改一个 Node”最终如何变成 GPU 上的像素,并能解释 DrawCall、合批和 Overdraw 的来源。
- Lesson037|Cocos 2.x 渲染流程总览(重写完成)
- Lesson038|Transform Dirty 如何在渲染阶段得到最终 World Matrix(重写完成)
- Lesson039|Local、World、View、Screen 坐标如何转换(重写完成)
- Lesson040|Camera、可见性判断与渲染顺序(重写完成)
- Lesson041|Sprite 从 SpriteFrame 到 RenderData 经历了什么(重写完成)
- Lesson042|Assembler 如何生成顶点、UV、颜色和索引数据(重写完成)
- Lesson043|Label 为什么通常比 Sprite 更复杂(重写完成)
- Lesson044|Material、Effect、Technique、Pass、Shader 的关系(重写完成)
- Lesson045|Vertex Shader 和 Fragment Shader 分别做什么(重写完成)
- Lesson046|Texture、Sampler、纹理格式与显存(重写完成)
- Lesson047|Blend、Depth、Stencil 与 Render State(重写完成)
- Lesson048|DrawCall 是什么,CPU 在提交什么(重写完成)
- Lesson049|两个 Sprite 在什么条件下可以合批(重写完成)
- Lesson050|哪些状态变化会打断合批(重写完成)
- Lesson051|Dynamic Atlas 如何降低 DrawCall(重写完成)
- Lesson052|Mask、Graphics、Spine、Particle 的特殊渲染成本(重写完成)
- Lesson053|Overdraw 与 Fill Rate:DrawCall 不高为什么仍然会卡(重写完成)
- Lesson054|阶段复习:一次 UI 修改如何经过 Renderer 到达 GPU(重写完成)
阶段重点数据流:
text
Node / Component 状态
→ Transform / RenderData
→ Assembler
→ Material / Texture / Render State
→ Batch
→ DrawCall
→ GPU Pipeline
→ ScreenStage05|Performance(Lesson055~072,重写完成)
阶段目标:从凭经验优化升级为“提出假设、采集证据、实施修改、对比验证”。
- Lesson055|性能问题的四个维度:CPU、GPU、Memory、IO(重写完成)
- Lesson056|FPS、Frame Time、刷新率与帧预算(重写完成)
- Lesson057|Creator Profiler 应该怎么看(重写完成)
- Lesson058|CPU 性能:一帧时间花在哪里(重写完成)
- Lesson059|GPU 性能:DrawCall、Overdraw、带宽和 Fill Rate(重写完成)
- Lesson060|Texture Memory:图片为什么最容易吃掉内存(重写完成)
- Lesson061|Node 和 Component 太多为什么会慢(重写完成)
- Lesson062|Widget、Layout、ScrollView 的刷新与遍历成本(重写完成)
- Lesson063|JavaScript GC 与高频临时对象(重写完成)
- Lesson064|对象池解决了什么,又可能制造什么问题(重写完成)
- Lesson065|Event、Scheduler、闭包和监听器泄漏(重写完成)
- Lesson066|load、preload、缓存与加载峰值(重写完成)
- Lesson067|资源释放、场景切换与内存不下降(重写完成)
- Lesson068|Label、Animation、Particle 的常见性能问题(重写完成)
- Lesson069|启动速度、首屏时间与分阶段加载(重写完成)
- Lesson070|微信小游戏的包体、内存、渲染与平台限制(重写完成)
- Lesson071|性能实战:完整排查一次页面打开卡顿(重写完成)
- Lesson072|阶段复习:建立可复现、可量化的性能证据链(重写完成)
性能分析固定流程:
text
稳定复现
→ 明确指标和设备
→ 判断 CPU / GPU / Memory / IO
→ 使用 Profiler 或平台工具采样
→ 找到最大成本
→ 单变量修改
→ 对比验证
→ 记录结论与适用边界Stage06|JSB & Native Bridge(Lesson073~080,重写完成)
阶段目标:连接 Creator JavaScript 世界与 C++ 原生世界,为阅读引擎源码和学习 Modern C++ 建立上下文。
- Lesson073|JavaScript Engine、JSB 与 Cocos2d-x 的关系(重写完成)
- Lesson074|一个 Creator API 如何沿调用链进入 Native(重写完成)
- Lesson075|JavaScript 对象与 C++ 对象如何绑定(重写完成)
- Lesson076|为什么频繁跨 JSB 调用可能很贵(重写完成)
- Lesson077|GC、引用计数与跨语言对象生命周期(重写完成)
- Lesson078|Web 与 Native 的运行环境为什么不完全一致(重写完成)
- Lesson079|主线程、渲染、网络、音频与平台线程边界(重写完成)
- Lesson080|阶段复习:从 Creator API 定位到原生实现(重写完成)
阶段产出:
text
TypeScript / JavaScript
→ JavaScript Engine
→ Binding / JSB
→ C++ Engine Object
→ Renderer / Platform APIPhase 2|Modern C++ 共同基础
Stage07|Modern C++ Foundation(Lesson081~095)
状态:已完成
阶段目标:不以背语法为目标,理解 C++ 的编译模型、内存、对象生命周期、资源所有权、并发和工程工具。
- Lesson081|从
.cpp到可执行文件:预处理、编译与链接(已完成) - Lesson082|Stack、Heap、Pointer 与 Reference(已完成)
- Lesson083|Class、Object、构造、析构与对象生命周期(已完成)
- Lesson084|RAII:用对象生命周期管理资源(已完成)
- Lesson085|Copy、Move 与值语义(已完成)
- Lesson086|
unique_ptr、shared_ptr、weak_ptr与所有权(已完成) - Lesson087|vector、list、map、unordered_map 如何选择(已完成)
- Lesson088|Iterator、Algorithm 与 Lambda(已完成)
- Lesson089|Template、泛型代码与编译期实例化(已完成)
- Lesson090|内存布局、Alignment、Cache 与数据局部性(已完成)
- Lesson091|Thread、Mutex、Condition Variable(已完成)
- Lesson092|Atomic、竞态条件与线程安全(已完成)
- Lesson093|CMake 与一个可维护的 C++ 项目结构(已完成)
- Lesson094|GDB、Sanitizer、崩溃和内存错误排查(已完成)
- Lesson095|综合实践:实现并验证一个小型任务系统(已完成)
完成 Stage07 后,可以选择一条专项路线,也可以根据工作目标先后完成两条路线。
Phase 3|职业方向专项
Phase 3 不再共用 Lesson096 之后的编号,改为两条并排专项路线。这样路线 A 和路线 B 可以独立推进,不会出现编号冲突;两条路线共同依赖 Stage07 的 Modern C++ 基础。
路线 A|Cocos 引擎、渲染与性能
A1|Engine Architecture
课件: 08_Cocos_Engine_Route/A1-Engine-Architecture.md(已完成)
目标:遇到不理解的 Creator 行为时,能够自行沿源码找到对象、状态和调用链。
重点主题:
- Cocos Creator 2.x 编辑器、JavaScript Engine、Cocos2d-x 的架构边界
- CCObject、Node、Component 的对象体系
- Director、Scheduler、ComponentScheduler 的源码结构
- Scene、Prefab、反序列化与激活流程
- EventTarget 与输入事件系统
- Asset Library、Loader、依赖与缓存
- JSB 自动绑定、手动绑定与对象生命周期
- 平台适配层与原生源码调试
- 从一个公开 API 定位到最终实现的方法
A2|Advanced Rendering
课件: 08_Cocos_Engine_Route/A2-Advanced-Rendering.md(已完成)
目标:从理解 Cocos Renderer 进入系统的实时渲染和 GPU 分析。
重点主题:
- GPU 渲染管线与 Render Queue
- Frame Buffer、Render Target、Offscreen Rendering
- Depth、Stencil、Blend 与透明物体排序
- Uniform、UBO、纹理格式和 GPU Memory
- 后处理、模糊和常见屏幕效果
- 光照、阴影、Normal、Tangent 与 PBR 基础
- GPU Instancing 与批量绘制
- RenderDoc / Frame Debugger
- Shader 性能和 GPU 瓶颈分析
A3|Advanced Performance
课件: 08_Cocos_Engine_Route/A3-Advanced-Performance.md(已完成)
目标:从常规业务优化进入系统级 CPU、GPU、内存和帧稳定性分析。
重点主题:
- CPU Cache、Cache Line、AoS / SoA、Branch Prediction
- 内存分配器、Memory Pool、Arena 与 Fragmentation
- 多线程、锁竞争、False Sharing 与 Job System
- Flame Graph 与 Native Profiler
- CPU / GPU 同步与 Frame Pacing
- 启动、加载、内存峰值和真机专项分析
- Native Crash、符号化与性能回归
A4|Engine Practice
课件: 08_Cocos_Engine_Route/A4-Engine-Practice.md(已完成)
建议实践:
- 修改并调试一条引擎调用链
- 实现一个自定义渲染组件或 Shader 效果
- 完成一次 DrawCall / Overdraw 专项优化
- 完成一次资源加载与内存峰值专项优化
- 输出包含复现、数据、修改和回归验证的性能报告
路线 B|C++ Linux 游戏服务端
B1|Linux Engineering
课件: 09_Cpp_Linux_Server/B1-Linux-Engineering.md(已完成)
目标:能够在 Linux 环境开发、调试、部署并维护一个 C++ 服务。
重点主题:
- 文件系统、Shell、用户和权限
- Process、Thread、Signal、
/proc - gcc、clang、make、cmake
- GDB、Core Dump、Sanitizer
- ps、top、网络和内存排查工具
- 日志、配置、systemd 与优雅退出
- 部署一个可持续运行的 C++ 小服务
B2|Network
课件: 09_Cpp_Linux_Server/B2-Network.md(已完成)
目标:理解网络 API 背后的协议和操作系统机制,并能实现基础网络服务。
重点主题:
- IP、Port、Socket 与网络分层
- TCP 握手、可靠性、流量控制、拥塞控制和粘包
- UDP 的适用场景
- Blocking、Non-blocking、select、poll、epoll
- Reactor、Event Loop 与连接管理
- 消息边界、序列化、心跳、超时和重连
- HTTP、HTTPS、WebSocket
- 延迟、抖动、丢包和客户端不可信原则
- 实现支持多连接和自定义协议的 TCP Server
B3|Server Engineering
课件: 09_Cpp_Linux_Server/B3-Server-Engineering.md(已完成)
目标:把 C++、Linux 和 Network 组合成可以维护的服务端工程能力。
重点主题:
- Server Tick、Timer、Task Queue 与 Thread Pool
- Connection、Session 和玩家在线状态
- Async IO、RPC 与错误码
- 日志、配置、监控和健康检查
- 优雅启动、退出、Crash、Core Dump、Watchdog
- 压力测试、容量评估和服务端性能分析
B4|Database & Cache
课件: 09_Cpp_Linux_Server/B4-Database-Cache.md(已完成)
重点主题:
- MySQL 表设计、索引、事务、锁、Explain、慢查询和连接池
- Redis 常用结构、TTL、Pipeline 和持久化
- 缓存穿透、击穿、雪崩和分布式锁基础
- 数据放在进程、缓存还是数据库的判断依据
B5|Distributed Systems
课件: 09_Cpp_Linux_Server/B5-Distributed-Systems.md(已完成)
重点主题:
- Gateway、RPC、Message Queue、Publish / Subscribe
- Load Balancing、Service Discovery、Health Check
- Timeout、Retry、Idempotency、Circuit Breaker、Rate Limit
- 分布式 ID、CAP、最终一致性和服务容错
- 灰度发布、横向扩容和可观测性
B6|Game Server Architecture
课件: 09_Cpp_Linux_Server/B6-Game-Server-Architecture.md(已完成)
重点主题:
- Login、Gateway、Game、Room、Match、Chat、Ranking 服务
- 玩家 Session、状态、存档与房间生命周期
- 匹配、排行榜、邮件、活动和定时任务
- 状态同步、帧同步与 Authoritative Server
- 防作弊、服务重启和玩家恢复
B7|Production Project
课件: 09_Cpp_Linux_Server/B7-Production-Project.md(已完成)
建议使用一个完整项目串联:
text
Cocos 客户端
+ C++ Linux 服务端
+ TCP / WebSocket
+ MySQL
+ Redis项目至少覆盖:登录、长连接、心跳、断线重连、协议、Session、玩家数据、排行榜、匹配、房间、日志、配置、Linux 部署、监控、压测和 Crash 排查。
五、单课结构
课件结构服务于主题,不为了统一目录机械重复。普通机制课与阶段复习课采用不同模板。
普通机制课应包含:
- 本课目标或一个明确的核心问题。
- 稳定的心智模型,以及从 API 到引擎内部的数据流。
- 必要的源码、伪代码、时序图或数据流,用于解释机制而不是装饰目录。
- 至少一个工程案例。
- 常见误区和 Creator 版本边界。
- 练习题与参考答案。
- 本课总结与下一课预告。
以下内容按需加入,不强制每课重复:
- 前置知识和上节课回顾:当本课存在不明显的知识依赖时加入。
- 验证实验:只在结论需要观察运行时行为、性能数据或版本差异时加入,不要求每课机械设置实验。
- 面试题:普通课只保留真正能检验机制理解的问题,集中面试题放在阶段复习课。
- 官方文档或源码链接:涉及私有实现、弃用 API、小版本差异和平台限制时必须提供。
阶段复习课应包含:
- 本阶段知识树和完整数据流。
- 一个跨多课的综合案例或实验。
- 排查清单、阶段错题和面试题。
- 可验证的阶段能力与下一阶段入口。
单课应遵守:
- 一课只解决一个核心问题。
- 先建立稳定心智模型,再补充源码细节。
- 对“通常、大概、可能”等结论标明适用版本和条件。
- Creator 2.4.x 主流程与 2.0~2.3 兼容接口、3.x 迁移对照必须明确分开。
- 资源、渲染和平台限制等高风险结论应链接官方文档或对应源码位置。
- 性能结论必须说明指标、环境和验证方式。
- 不为了凑课时重复前面已经完成的基础概念。
单课只有同时满足以下条件,才能标记为“重写完成”:
- 用一个真实问题或故障现象引入,而不是直接罗列定义。
- 有贯穿全课的示例,并逐步增加条件和复杂度。
- 明确解释“是什么、为什么、引擎怎么做、项目怎么用”。
- 明确解释关键对象、状态、数据流、边界条件和设计取舍,不能只给任务清单。
- 对版本相关结论标明验证入口,不用“通常、可能”代替解释。
- 至少包含一个真实项目案例和一个错误方案反例。
- 需要实验时写明步骤、预期现象、观察点和失败时的排查顺序;不需要实验时用机制推导替代。
- 练习覆盖概念题、应用题和故障诊断题,并给出推导过程。
- 与上一课和下一课形成知识依赖,不重复充当大纲。
- 内容深度以 Stage01 为基准,不以文件数量、行数或实验数量作为完成标准。
六、阶段验收标准
每个阶段结束时,不以“看完课件”为完成标准,而以能否完成以下任务为准:
- 画出本阶段的核心数据流或时间线。
- 用自己的话解释每个关键对象的职责和边界。
- 对一个真实问题提出分层排查步骤。
- 完成至少一份机制分析、源码验证或可复现问题记录。
- 整理阶段错题、常见误区和可复用检查表。
七、调整原则
后续允许:
- 根据内容密度拆分或合并尚未开始的课程。
- 根据真实项目增加案例和专项实验。
- 根据 Creator 2.4.x 的源码核查结果修正描述。
- 根据职业方向调整 Phase 3 的深度和顺序。
尽量不随意改变:
- 已完成课程的编号和主题。
- 公共核心的知识依赖顺序。
- 每个阶段从机制到实践再到复盘的闭环。
- 已经被上一课明确预告的下一课主题。
这份总纲首先是一条可执行的学习路线,其次才是课程目录。课程数量不是目标;最终目标是能解释机制、验证结论并解决真实问题。
