【官网正式版更新】Cocos Creator v2.0.0 社区版发布贴

感谢所有开发者的试用和反馈!

更新说明

从 5.31 发布 Preview 版本开始,我们一直在尽力修复大家反馈的问题,同时,我们准备好了 Android,iOS,Mac,Win32 等原生平台和 QQ 玩一玩(轻游戏)平台的支持。经过几轮紧张测试之后,终于可以发布了。更重要的是,在 Beta 版本之前,我们已经收拢了 2.0 的所有新功能开发。Beta 版本相比 Preview 版本有一些很重要的调整,下面会详细介绍,但是在 Beta 版本之后,我们就不会再对 API 和功能做任何大更新了,会专注在提升稳定性和兼容性,以及文档的准备上。

注意,2.0 和 1.x 有不少 API 改动,项目升级过程中可能经历很多报错、脚本或资源丢失等问题,请大家在更新前备份好项目。

有同学反馈 2.0 打开项目后,再回到 1.9 节点顺序无法被改变,这个确实是 2.0 数据结构改变带来的问题,建议想尝试 2.0 的同学,备份好项目,避免自己的项目在 1.9 出现问题

##升级指南文档

版本更新

官网正式版本已更新

Cocos Creator v2.0.0 RC4: 下载 Mac 版本 | 下载 Windows 版本

详细更新列表:

  • [测试用例] 添加微信代码分包测试用例
  • [MODIF] 优化 windows 平台编译路径长度,减少因路径过长导致的编译失败
  • [MODIF] 优化常驻节点在切换场景时的迁移
  • [MODIF] 默认开启 Main Camera 的 stencil 清理
  • [FIX] 支持 Native ttf 字体加载
  • [FIX] 修复原生平台下 game show hide 事件未派发的问题
  • [FIX] 修复微信小游戏平台勾选 md5 后,ttf 字体无法加载的问题
  • [FIX] 修复 windows 编辑器部分 particle 资源导入失败的问题
  • [FIX] 修复 render engine 中 stencil 默认清理值不为 0 的错误
  • [FIX] 修复TiledLayer.setTileGIDAt 不接受 0 的问题
  • [FIX] 修复 Spine 在 frame 数据为空时,material 为空的问题
  • [FIX] 修复 Editbox 中对未生成的 label 的访问
  • [FIX] 修复 bmfont Label 修改内容后尺寸没有更改的问题

Cocos Creator v2.0.0 Beta 9: 下载 Mac 版本 | 下载 Windows 版本

重要更新:已支持热更新,见下方的使用方式更新

已知问题:

  • Windows 下项目路径过长会导致 android 编译失败,这是 windows 的平台限制,可以将 jsb build 目录移动到某个盘根目录下来解决,或者可以参考这个帖子中的解决方案(下个版本将会优化)
  • Native 下 ttf 字体暂时无法加载,请绕过(发布前发现的抱歉,我们还是决定先发布论坛测试,下个版本会解决这个问题)

详细更新列表:

  • [FEATURE] 支持热更新,事件 API 有改动,详见后文
  • [FIX] 特定粒子系统无法导入导致编辑器卡在资源导入界面的问题
  • [FIX] 修复自定义(custom)粒子资源从旧版本导入时会被初始值覆盖的问题
  • [FIX] 修复粒子系统切换 sprite frame 后,保存为 prefab 再实例化,新的 sprite frame 无法生效的问题
  • [FIX] 修复物理系统中 SetTransform 的使用问题
  • [FIX] 消除 Label 在浅色背景上出现的黑边
  • [FIX] 修复 Spine 设置监听器可能出现的报错
  • [FIX] 修复 Sprite 设置 state 失效的问题
  • [FIX] 修复 LabelOutline 失效的问题
  • [FIX] 修复 Editbox 输入时文字重影的问题
  • [FIX] 修复默认粒子特效添加时无法显示以及切换项目时贴图失效的问题
  • [FIX] 修复微信子域中没有清空场景的问题(可能出现残影)
  • [FIX] 修复微信子域中设置 image.src 为空导致的 warning
  • [FIX] 修复原生平台 default 模版编译报错的问题
  • [FIX] 修复原生平台 Label 被清空时的崩溃问题
  • [FIX] 修复编辑器切换任意布局时的报错
  • [FIX] 修复编辑器新建脚本时检查器未显示的问题
  • [FIX] 修复测试例中 Camera 未清空 stencil buffer 导致的剪裁效果错误
  • [FIX] 修复编辑器偏好设置中无法设置微信开发者工具路径的问题

Cocos Creator v2.0.0 Beta 7: 下载 Mac 版本 | 下载 Windows 版本

已知问题:

  • 热更新暂不支持,会在后续版本提供
  • 自定义(custom)粒子资源从旧版本导入时会被初始值覆盖(下个版本修复)
  • 粒子系统切换 sprite frame 后,保存为 prefab 再实例化,新的 sprite frame 无法生效(下个版本修复)
  • 龙骨动画切换 armatureName 后 playAnimation,动画不会播放

详细更新列表:

  • [FEATURE] 喜大普奔,已支持小游戏开放数据域发布,请选择最少模块进行打包,争取最小包体。注意:开放数据域发布改为一个独立的发布平台,不再是在微信小游戏平台中勾选选项
  • [FEATURE] 升级物理引擎为 box2d.ts,性能更优
  • [MODIF] 添加并默认开启 cc.macro.CLEANUP_IMAGE_CACHE 大幅度优化微信平台内存使用
  • [MODIF] 优化 TiledLayer 中关于 TiledTile 的获取和使用
  • [MODIF] 添加 Animation.EventType 枚举
  • [MODIF] 不再提示 Vec2.normalize 中的除零警告
  • [FIX] 修复场景延迟加载无法显示贴图的问题
  • [FIX] 修复 AnySDK 功能支持
  • [FIX] 修复编辑器设置自定义引擎后保存不生效的问题
  • [FIX] 修复新建脚本时属性检查器显示不正确
  • [FIX] 修复编辑器中取消勾选粒子系统 preview,粒子不会消失的问题
  • [FIX] 修复 release 模式中仍然显示 debug 面板的问题
  • [FIX] 修复 Mask 组件的 hitTest 检测错误
  • [FIX] 修复 Node 中缺失 once 接口的错误
  • [FIX] 修复 loadResDir 回调中不包含 Atlas 资源的 Sprite Frame 子资源
  • [FIX] 修复 Spine material 为空的错误
  • [FIX] 修复 Sprite material 可能为空的错误
  • [FIX] 修复 render texture 导致的 mask 表现错误
  • [FIX] 修复剔除 Tilemap 模块导致的 parser 报错
  • [FIX] 修复 Editbox 用代码设置 string 不会立即更新的问题
  • [FIX] 修复 Editbox 非 active 状态下设置 string 导致的错误
  • [FIX] 修复多平台 TTF 字体无法加载的问题
  • [FIX] 修复 ParticleSystem update 导致的错误数据上传问题
  • [FIX] 修复 request buffer 获取引用可能是旧的错误
  • [FIX] 修复 SpriteFrame 没有初始化 EventTarget 的错误
  • [FIX] 修复 Simulator 窗口关闭时的报错
  • [FIX] 修复部分 API 文档和 TS 描述错误

Cocos Creator v2.0.0 Beta 4: 下载 Mac 版本 | 下载 Windows 版本

  • [FEATURE] 2.0 已支持所有发布平台,但仍不支持小游戏开放数据域发布(后续版本支持)
  • [MODIF] 优化事件系统
  • [MODIF] 优化启动流程,用户可以在插件脚本中设置 macro 并定制初始化流程
  • [MODIF] 优化 RichText 复用逻辑,避免 Label 贴图重复创建
  • [MODIF] 增加音频对象复用,提升性能
  • [MODIF] 抽象 Blend Function 到 RenderComponent 中,更多渲染组件可以设置
  • [MODIF] 由 cc.view 触发 canvas-resize 事件
  • [MODIF] cc.view 始终针对全屏 Canvas 设置 viewport
  • [MODIF] 将原生平台相关定制迁移到独立仓库
  • [MODIF] 添加原生品台缺失的 LocalStorage API:length,key
  • [FIX] 部分浏览器不支持 ES6 语法的访问错误
  • [FIX] 修复 hierarchy 面板中修改父节点导致的异常
  • [FIX] 修复 Profiler node 受用户摄像机 mask 影响的问题
  • [FIX] 修复所有打开 Prefab 编辑窗口再关闭时报错且无法回到场景的问题
  • [FIX] 修复部分组件在 undo redo 时造成的报错
  • [FIX] 修复 SpriteFrame 改变时 Alpha 级联失效的问题
  • [FIX] 修复多边形碰撞体重新生成点的报错问题
  • [FIX] Layout 透明度修改后节点消失的问题
  • [FIX] RichText 节点切换状态时报错
  • [FIX] DragonBones 透明度不受节点透明度影响
  • [FIX] 修复微信下载过程中断网导致的回调丢失无法加载问题

Preview 版本发布贴

RELEASE NOTES

AssetsManager 事件接口调整

AssetsManager 在旧版本中需要通过 cc.eventManager 来监听回调,在 2.0 中我们提供了更简单的方式:

// 设置事件回调
assetsManager.setEventCallback(this.updateCallback.bind(this));
// 取消事件回调
assetsManager.setEventCallback(null);

事件系统调整

Cocos Creator v1.x 的事件系统在引擎和用户代码中都被广泛使用,但是为了兼容派发触摸事件的需求(捕获和冒泡),它的设计过于复杂,对于普通的简单事件反而性能有些低下。在 v2.0 中为了解决这个问题,我们将树形结构中包含捕获和冒泡阶段的事件模型仅实现在了 cc.Node 中,彻底简化了 EventTarget 的设计。下面是关键的 API 对比

Node:

  • on (type, callback, target, useCapture):注册事件监听器,可以选择注册冒泡阶段或者捕获阶段
  • off (type, callback, target, useCapture):取消注册监听器
  • emit (type, arg1, arg2, arg3, arg4, arg5):派发简单事件
  • dispatchEvent (event):以捕获和冒泡事件模型在节点树上派发事件(捕获阶段触发顺序从根节点到目标节点,冒泡阶段再从目标节点上传到根节点)

EventTarget:

  • on (type, callback, target):注册事件监听器
  • off (type, callback, target):取消注册监听器
  • emit (type, arg1, arg2, arg3, arg4, arg5):派发简单事件
  • dispatchEvent (event):兼容 API,派发一个简单的事件对象

可以看到只有 Node 的 on/off 支持父节点链上的事件捕获和事件冒泡,默认仅有系统事件支持这样的派发模式,用户可以通过 node.dispatchEvent 在节点树上以同样的流程派发事件。这点跟 v1.x 是一致的。

但是,Node 上使用 emit 派发的事件和 EventTarget 上的所有事件派发都是简单的事件派发方式,这种方式派发的事件,在事件回调的参数上有区别:

// v1.x
eventTarget.on(type, function (event) {
    // 通过 event.detail 获取 emit 时传递的参数
});
eventTarget.emit(type, message); // message 会被保存在回调函数的 event 参数的 detail 属性上
// v2.0
eventTarget.on(type, function (message, target) {
    // 直接通过回调参数来获取 emit 时传递的事件参数
});
eventTarget.emit(type, message, eventTarget); // emit 时可以传递至多五个额外参数,都会被扁平的直接传递给回调函数

优化启动流程

在 v1.x 中,引擎和用户脚本的加载顺序是:

  • 加载引擎
  • 加载 main.js
  • 初始化引擎
  • 初始化渲染器
  • 加载项目插件脚本
  • 加载项目主脚本

而在 v2.0 中如下:

  • 加载引擎
  • 加载 main.js
  • 加载项目插件脚本
  • 加载项目主脚本
  • 初始化引擎(Animation Manager, Collision Manager, Physics Manager, Widget Manager)
  • 初始化渲染器(cc.renderer)

所以在 v2.0 中,用户可以在插件脚本中干预引擎和渲染器的初始化过程,比如定义 cc.macro.ENABLE_WEBGL_ANTIALIAS,这在 v1.x 中必须写在 main.js 的特定位置才可以。如果用户对于引擎有小部分的定制需求,也可以在插件脚本中初始化。当然,这也意味着在加载插件脚本和项目脚本时,渲染器还没有初始化,所以 cc.renderer 以及它的内容都是没有准备好的,用户可以在插件脚本中用下面的方法来延迟初始化:

cc.game.once(cc.game.EVENT_ENGINE_INITED, function () {
    // 可以使用 cc.renderer 等初始化之后才准备好的引擎对象
});

相关资源

资源升级

v2.0 合并了 v1.10 的所有修改,v1.10 对底层资源类型进行了重构,大多数项目不受影响,但有些项目可能会收到一些警告,详情请查阅 v1.10 资源升级指南

编辑器

  • 实现了 Texture 的 premultiply alpha,filter mode,wrap mode 配置
  • 集成 Quick Compile,自定义引擎只需要使用菜单的 “开发者选项” -> “编译引擎” 可在几秒内快速编译完成

引擎

  • 彻底移除渲染树
  • 添加基于 3D Renderer 的新渲染器
  • 渲染组件实现全面升级
  • Camera 组件升级
  • 添加自定义渲染组件能力(尚未公开文档,正式版之前会开放)
  • 正式增加了 RenderTexture 资源类型,可以参考 example cases 中的 “render_to_canvas” 和 “render_to_sprite” 测试用例学习如何使用 RenderTexture 完成截屏

REMOVED & DEPRECATION

  • v1.x 的大量私有以及非核心 API 被移除或废弃,详细内容可以参考 deprecated.js

性能和框架

性能进化

从 v2.0 开始,我们建立了性能基线跟踪测试,下面是 v1.8.2(v1.x 后续版本没有性能优化)和 v2.0 的性能对比

框架进化

这里放出两张简单的 v2.0 架构图以及和 v1.x 的对比,未来会有更详细的文档献给大家




感谢每一位参与体验的同学,相关问题请反馈到本帖下!

版本测试流程:alpha => beta => rc => 正式版
alpha: 开发过程中的技术预览版,只经过冒烟测试,未经测试团队验证
beta: 功能接近完整的测试版,已经过测试团队验证
rc: 发行候选版本,原则上避免进行任何改动。如果用户没反馈什么大的问题,将直接修改版本号作为正式版

23赞

支持,不容易呀

沙发支持

先占楼

占楼支持,引擎组也不容易,都快半夜了,还在加班。感谢,加油!

支持加油,能把3D也加上就更好了

感谢引擎团队的奉献

这个肯定是要支持一下了。我要不要现在直接从1.10换到这个版本呢?

支持支持!!!

不错!

是我的操作不正确,还是文档API无法查看?

所有API都无法看。

这API改动,大概是没法升级了。全局搜了一下,有720个需要改动。新项目再测试

1.10.0党有点小失望

汇报bug,cc.skewBy cc.skewTo 这两个action失效

为何编辑器还是有生成空节点的BUG呢?不是说解决了吗?

卧槽程序员都不睡觉的么

支持了。终于等到了,

占楼,支持!!!