《Cocos 游戏开发实战》9.2 Tween 与程序动画
金币旋转、道具闪烁、弹窗弹入——这些「一个数在变」的动效不值得开动画编辑器。本节讲透 Cocos 3.8 的 tween:目标、动作、控制三层模型,to/by/sequence/parallel 的组合,easing 曲线怎么挑手感,以及目标被销毁导致的 tween 泄漏怎么防。
category
金币旋转、道具闪烁、弹窗弹入——这些「一个数在变」的动效不值得开动画编辑器。本节讲透 Cocos 3.8 的 tween:目标、动作、控制三层模型,to/by/sequence/parallel 的组合,easing 曲线怎么挑手感,以及目标被销毁导致的 tween 泄漏怎么防。
上一节让方块会跳,但它仍能穿过金币与尖刺。本节给《方块冲刺》装上碰撞规则:先在项目设置里规划 PLAYER/GROUND/COIN/HAZARD 分组与碰撞矩阵,再用 Contact2DType 接触回调把「谁撞了谁」路由成业务事件,接着实现金币拾取、尖刺致死与 goalX 进度推进,并给出 main.scene 的节点树。
本节把《方块冲刺》的输入与角色控制落到 Cocos Creator 3.8:先用 input 与 Input.EventType 把键盘空格、方向键与触摸归一成跳示意向,再用 RigidBody2D 写自动跑与可变高度跳跃,最后补齐土狼时间、跳跃缓冲、松手切跳三件套手感,并给出 Player.prefab 的编辑器搭建步骤与组件面板取值。
本节对比 director.loadScene、preloadScene 与 bundle.loadScene 三条切换路径,用转场遮罩消除裸切场景的黑帧,把下一关资源的预加载挪进结算界面,并用场景生命周期事件收尾清理;同时给出场景间传参的 SceneRouter 与可直接单测的纯逻辑实现。
资源管线决定首包多大、加载多快。本节讲清 assets/ 的目录分层、resources 目录的特殊性、Bundle 到底是什么(内置 main/resources/internal/start-scene 与自定义 Bundle 的区别)、怎么把目录配置成 bundle-levels 分包、Bundle 优先级与依赖,以及代码里怎么拿到 Bundle,最后给出《方块冲刺》首包与分包的具体划分。
组件挂上节点后代码何时执行,是卷二一半 bug 的根因。本节讲透 Cocos Creator 3.8 的七个生命周期回调、引擎一帧的调度骨架、@executionOrder 如何决定同类回调先后、director 的帧级事件钩子、schedule 与 scheduleOnce 定时调度,以及「节点未激活时 start 不触发」这类首帧陷阱,并给出打印验证顺序的步骤与输出。
原生端是《方块冲刺》三端发布的最后一站,也是最重的一站:构建出来的是真正的 Android Studio 与 Xcode 工程,要管包名、ABI、签名、证书。本节给出两端的构建面板取值,讲清原生工程的结构与打包流程,附上可编译的平台判定脚本与三端差异对照表,最后把三端产物收进同一份发布清单。
微信小游戏是 H5 的裁剪形态,但限制更多:主包有体积上限、必须配远程服务器地址、还得在微信开发者工具里预览。本节把构建面板上的微信专属选项逐项给出取值,讲清 wechatgame 产物的结构,给出可直接编译的 wx 存档与登录桥接脚本,并整理主包超限与常见报错的处置办法。
第 13 章把性能调好之后,该把它构建成能发布的产物了。本节把 H5 构建面板上的每一项都给出实际取值——平台 Web Mobile、主包压缩类型 Merge Deps、MD5 Cache 勾选、Source Maps 关闭,讲清 build/web-mobile 的目录结构,给出静态托管的缓存与压缩策略,并附上可编译的平台判定与首屏预加载脚本。
《方块冲刺》要在三端保存同一份进度,而三端的存储 API 各不相同:微信走 wx.setStorageSync、H5 走 localStorage、原生走 sys.localStorage。本节先定存档数据模型,再用一层 KV 适配器把差异收敛到一处,最后写一条可单测的版本迁移链,让老玩家的 v1 存档安全升到 v3。
把 1.1 的规格落到磁盘:讲清 Cocos 工程在文件系统里长什么样(assets 进版本库、library/temp/local 不进),定下 assets/ 的六层资源分层与 scripts/ 的 core/game/ui/platform 四层职责,给出可单测的路径常量,并用 resources 演示加载 configs/levels.json。
《Cocos 游戏开发实战》全书导航页:说明本卷定位与读者画像、前置知识、三条阅读路径与十周排期,交代贯穿项目《方块冲刺》在卷二里的产品形态与工程约定,讲清 L2/L3 两层的可验证口径,并按六个部分列出 18 章 54 节的完整章节索引与常见问题速查表,方便按需定位与跳读。
跑到第 9 章,《方块冲刺》的角色还在用代码改 scale 假装在动。本节把动画交还给编辑器:用 Animation 组件与 AnimationClip 资源做一条 run 剪辑,讲清关键帧、采样率与 wrapMode 的取舍,给出 .anim 文件在编辑器里打开的样子,并写一个可编译的 crossFade 播放组件。
本节把《方块冲刺》的启动链路拆成引擎初始化、boot 场景加载、首包资源预取三个阶段,给出 BootFlow 组件的完整实现、加权进度条算法与微信小游戏的启动约束,并说明 boot.scene 在编辑器里打开时会看到哪些节点、挂哪些组件、属性面板显示什么值。
装饰器是 Cocos 组件脚本的地基:@ccclass 把类注册进序列化器,@property 把字段暴露到属性面板。本节讲清四个基础类型标注为什么必须显式写、引用类型与数组的默认值约定、erasable syntax 下用 Enum() 替代 TS enum,以及 tooltip/range/visible/formerlySerializedAs 等选项的面板效果,并给出挂组件后应显示的值。
前两节分别压了 Draw Call 与纹理内存,但优化到底有没有用、下一刀该砍哪里,得靠数据说话。本节把 16.7 ms 的帧预算切成逻辑、物理、渲染、呈现四段,逐字段讲透 Cocos Profiler 的统计面板,给出帧时间采样与分段计时的可编译脚本,并落到低端机限帧降级的工程实现。
合批解决的是每帧提交次数,纹理内存决定的却是小游戏能不能启动。本节先算清一张纹理占多少内存,再对照 iOS、Android、H5 与微信小游戏各自的压缩格式,讲透 addRef/decRef 与 release 的引用计数规则,给出关卡图集加载与释放的可编译脚本,最后用对象池压住每帧 GC 抖动。
第 12 章把广告和激励视频接进《方块冲刺》后,跑酷主场景的 Draw Call 已经爬到 180 上下。本节从一次 Draw Call 的代价讲起,拆开 Cocos Creator 3.8 自动合批的三个前提,给出自动图集与 packable 的工程配置,用一段可编译的组件脚本把 Draw Call 采出来,最后列出打断合批的五类常见原因与逐条处置办法。
卷二不再自己造引擎,而是用 Cocos Creator 3.8 把《方块冲刺》做成能真发布的产品。本节锁定全书工程设定(工程名 block-dash、960×540、三端发布、bundle-levels 分包),给出功能与非功能需求、用例清单,把验收标准写成可测的纯 TypeScript 判定函数,并用 sys.Platform 落实平台降级矩阵。
回顾 mini2d 从第 1 章到第 18 章的完整演进路径,把它拆成 17 个模块对应的 17 个主题,总结五条贯穿全卷的核心收获:引擎不是黑盒、分层、可测试性、确定性与数据驱动,并给出继续深入的方向与卷二《Cocos 游戏开发实战》的衔接。