Skip to content

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++

完成公共主线后,应具备以下能力:

  1. 能解释常用 Creator API 背后的运行流程。
  2. 能判断逻辑发生在业务层、引擎层、资源层、渲染层还是原生层。
  3. 能使用证据定位帧率、卡顿、内存和加载问题。
  4. 能沿调用链阅读相关引擎源码,而不是盲目搜索答案。
  5. 具备继续学习 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
→ Screen

Stage05|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 API

Phase 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 排查。

五、单课结构 ​

课件结构服务于主题,不为了统一目录机械重复。普通机制课与阶段复习课采用不同模板。

普通机制课应包含:

  1. 本课目标或一个明确的核心问题。
  2. 稳定的心智模型,以及从 API 到引擎内部的数据流。
  3. 必要的源码、伪代码、时序图或数据流,用于解释机制而不是装饰目录。
  4. 至少一个工程案例。
  5. 常见误区和 Creator 版本边界。
  6. 练习题与参考答案。
  7. 本课总结与下一课预告。

以下内容按需加入,不强制每课重复:

  • 前置知识和上节课回顾:当本课存在不明显的知识依赖时加入。
  • 验证实验:只在结论需要观察运行时行为、性能数据或版本差异时加入,不要求每课机械设置实验。
  • 面试题:普通课只保留真正能检验机制理解的问题,集中面试题放在阶段复习课。
  • 官方文档或源码链接:涉及私有实现、弃用 API、小版本差异和平台限制时必须提供。

阶段复习课应包含:

  1. 本阶段知识树和完整数据流。
  2. 一个跨多课的综合案例或实验。
  3. 排查清单、阶段错题和面试题。
  4. 可验证的阶段能力与下一阶段入口。

单课应遵守:

  • 一课只解决一个核心问题。
  • 先建立稳定心智模型,再补充源码细节。
  • 对“通常、大概、可能”等结论标明适用版本和条件。
  • Creator 2.4.x 主流程与 2.0~2.3 兼容接口、3.x 迁移对照必须明确分开。
  • 资源、渲染和平台限制等高风险结论应链接官方文档或对应源码位置。
  • 性能结论必须说明指标、环境和验证方式。
  • 不为了凑课时重复前面已经完成的基础概念。

单课只有同时满足以下条件,才能标记为“重写完成”:

  1. 用一个真实问题或故障现象引入,而不是直接罗列定义。
  2. 有贯穿全课的示例,并逐步增加条件和复杂度。
  3. 明确解释“是什么、为什么、引擎怎么做、项目怎么用”。
  4. 明确解释关键对象、状态、数据流、边界条件和设计取舍,不能只给任务清单。
  5. 对版本相关结论标明验证入口,不用“通常、可能”代替解释。
  6. 至少包含一个真实项目案例和一个错误方案反例。
  7. 需要实验时写明步骤、预期现象、观察点和失败时的排查顺序;不需要实验时用机制推导替代。
  8. 练习覆盖概念题、应用题和故障诊断题,并给出推导过程。
  9. 与上一课和下一课形成知识依赖,不重复充当大纲。
  10. 内容深度以 Stage01 为基准,不以文件数量、行数或实验数量作为完成标准。

六、阶段验收标准 ​

每个阶段结束时,不以“看完课件”为完成标准,而以能否完成以下任务为准:

  • 画出本阶段的核心数据流或时间线。
  • 用自己的话解释每个关键对象的职责和边界。
  • 对一个真实问题提出分层排查步骤。
  • 完成至少一份机制分析、源码验证或可复现问题记录。
  • 整理阶段错题、常见误区和可复用检查表。

七、调整原则 ​

后续允许:

  • 根据内容密度拆分或合并尚未开始的课程。
  • 根据真实项目增加案例和专项实验。
  • 根据 Creator 2.4.x 的源码核查结果修正描述。
  • 根据职业方向调整 Phase 3 的深度和顺序。

尽量不随意改变:

  • 已完成课程的编号和主题。
  • 公共核心的知识依赖顺序。
  • 每个阶段从机制到实践再到复盘的闭环。
  • 已经被上一课明确预告的下一课主题。

这份总纲首先是一条可执行的学习路线,其次才是课程目录。课程数量不是目标;最终目标是能解释机制、验证结论并解决真实问题。