首页>博客>正文内容

Cocos Creator v1.6正式版发布啦!

分享

2017-08-16 作者: cocos

Cocos Creator v1.6 版本发布了!感谢社区对这个版本漫长测试周期的耐心等待和对测试版的积极试用和反馈。我们在这个版本更新中继续保持了优化性能和提升体验的传统,并且这个版本还是后续一系列重要的引擎进化的开始。

我们希望改善开发者编辑器使用体验的同时,不断提升 JS 和 C++ 引擎的性能,解决开发者最关心的包体、缓存、网络通讯等问题。基于这个目标,我们在 v1.6 版本中加入了下列重要功能。

特色功能

- JavaScript-Binding 绑定层升级,大幅提升安卓平台性能

- 预览游戏时脚本免打包,改动脚本后瞬间刷新游戏

- 批量编辑节点和组件属性

- web平台构建时自动将版本加入资源文件名

- 升级 iOS 平台的 WebSocket 库,解决大部分平台专属网络通讯问题

  JavaScript-Binding 绑定层全面升级

在这个版本中,我们升级了从 JavaScript 脚本到原生平台 C++ 绑定的中间层,一方面我们将原生平台使用的 JavaScript 引擎 SpiderMonkey 从 v33 版本升级到了 v52 版本,大幅度提高了安卓平台的 JavaScript 运行性能(由于 iOS 平台上不支持开启 JIT 所以效果并不明显);另一方面我们在这个版本开始对绑定层接口进行重构,目标是:

- 提供完全抽象的 JSB 绑定层 API,独立于 JavaScript 引擎,用户的绑定代码将不再受未来 JS 引擎升级影响

- 支持平台原生的 JS 引擎,包括 Android 平台的 v8,iOS 平台的 JavaScriptCore。

在升级绑定层后,我们不仅为后续开发者的 C++ 层绑定开发提供了稳定的环境,而且支持原生平台的 JS 引擎会使得构建原生版本时的包体大幅减小,因为不再需要将 SpiderMonkey 引擎库加入到发布版本中。

jsb-chart

 预览游戏时脚本免打包

由于脚本模块化加载的需要,我们从 Cocos Creator 第一个版本开始就对用户的脚本进行编译打包,但对于规模庞大、动辄几百个脚本的项目来说,每次修改任何脚本都会触发整个编译打包流程,会使得修改脚本后的等待时间非常长。为了解决这个问题,我们从 v1.6 开始引入了编辑器环境下脚本免打包的模块化系统,可以在预览环境下分别加载单个文件的脚本。对任何脚本的改动将只触发该脚本本身的编译流程,使得开发脚本后刷新预览的周期缩短到1~2秒,大大提升开发效率。

目前构建后的脚本仍然需要进行打包,因为终端浏览器里没有相应的加载环境。我们会在后续继续研究构建发布时也能保持每个脚本文件独立存在的构建模式,来方便需要分别更新脚本的开发者更容易部署游戏版本。

bundless

  批量编辑节点和组件属性

编辑 UI 场景时,经常会遇到需要选中一些节点并批量修改他们的一些属性的需要,这个版本我们加入了属性检查器的批量编辑功能。

多选节点后这些节点上共享的组件和属性就可以进行批量编辑了,当不同节点的某个属性值不同时,选中这些节点后,属性检查器上这个属性值会显示为 -, 修改这个属性会让所有选中节点上该属性都变成同样的值。

properties

 web 平台构建时为资源文件名加入版本号

对 H5 游戏开发者来说,有效利用浏览器的缓存机制,避免用户重复下载资源,并且在更新游戏资源时确保更新缓存的资源版本是非常重要的。我们在这个版本的构建发布面板里增加了 **md5 cache** 构建选项,勾选后会在构建时为所有资源文件名增加该文件的 md5 码。这样在更新游戏版本时,根据文件名的不同,用户的浏览器会自动重新下载 md5 改变了的资源,在最大限度使用缓存节省流量的情况下确保版本的一致性。

 iOS 平台上使用 SocketRocket 代替之前的 WebSocket 实现

我们用 facebook 开发的 [SocketRocket 库](https://github.com/facebook/socketrocket) 替换了之前一直在 cocos2d-x 和 Cocos Creator C++ 引擎中使用的 libWebsocket 库,这个全新的实现支持以下特性:

- SocketRocket 提供异步 API,更符合通讯习惯

- 封装了跨线程通讯

- 网络状态变更时不会造成连接关闭

- 锁定手机设备屏幕不再造成报错

- 不再依赖包体较大的 openssl 库

- 使用 wss 连接时不再需要本地 CA 根证书

后续版本中我们会对 socket.io 的原生实现也进行进一步的优化,希望能为开发者们提供一个简单、稳定的网络通讯编程环境。

完整改动列表

- [Audio] [Breaking] 修复 `audioEngine.stop` 会触发 finish 事件回调的问题,现在 setFinishCallback 设置的 callback 只有在自然播放结束的时候

  编辑器

- [Editor] 加入预览游戏时免编译脚本的模式,免编译模式下 VSCode 的调试配置需要通过开发者菜单更新

- [Editor] 移除内置代码编辑器,默认双击文本文件时会使用系统默认的应用打开

- [Editor] 修复 Windows 上编辑器运行路径和项目路径不在同一个驱动器时加载脚本路径错误的问题

- [Editor] 修复导出场景资源时引用量过大可能导致卡死的问题

- [Editor] 修复 require 第三方库时的报错 `can not find module for path : undefined`

- [Editor] editor-input 和 editor-textarea 控件添加 maxLength 支持

- [Editor] 禁止弹出和关闭部分核心面板,包括场景编辑器、资源管理器和节点树。

- [Editor] 修复 TS 脚本在重命名后,旧的不会删掉导致脚本名称重复的问题。

- [Editor] 修复场景保存时仍有 “Cannot read property ‘_prefab’ of null” 的报错

- [Editor] 修复 property 装饰器在新版 VSCode 中的报错

- [Editor] 修复项目中脚本过多时会出现 `too many open files` 的问题

- [Editor] 修复编辑器中无法通过 url 加载资源依赖的 raw asset 的问题,修复编辑器无法正确加载 TSX 资源的问题

- [Editor] 修复编辑器里脚本文件加载顺序不固定的问题

- [Editor] 修复切换场景编辑模式时可能出现 `Possible EventEmitter memory leak detected` 的报错问题

- [Editor] 修复创建 ToggleGroup 时报错的问题

- [Editor] 修复选中编辑 plist 中的 spriteFrame 时可能 Sprite Editor 窗口会卡死的问题

- [Build] 构建 Web 端时加入插入 eruda 的选项

- [Build] 修复 windows 平台上构建 web 时使用 md5 cache 报错的问题。

- [Build] 构建时压缩和合并资源 uuid,以优化 settings.js 资源索引文件的体积。

- [Build] 修复某些项目会在 build-raw-assets 时卡住不动的问题

- [Build] 修复构建非调试版本时 settings.js 未被压缩的问题

- [Build] 修复构建时添加 md5 cache 导致部分组件无法正确获取资源引用的问题

- [Build] 修复构建 Android 时每次都会重新编译的问题

- [Build] 修复 TTF label 在使用 md5 cache 无法正确下载资源与加载字体的 bug

- [Build] 修复较低版本 Xcode 在编译 iOS/Mac 工程时可能遇到的 `undefined symbol: NSStreamNetworkServiceTypeCallSignaling` 编译失败问题

- [Build] 在 web 构建面板上面添加 md5Cache 选项,为资源文件名增加 md5 编码,用于正确更新客户端资源缓存。

- [Build] 修复构建项目时,粒子系统的 plist 所在目录下的所有贴图会被强制导出的问题。修复构建项目后粒子 plist 里引用的资源 uuid 和压缩后的 uuid 不符。

- [AnySDK] 支持构建时动态添加 AnySDK 依赖,默认构建的工程不包含 AnySDK 代码。

- [ProjectSettings] 引擎模块选择界面增加全选选项

- [Preferences] 为偏好设置面板添加 tooltip

- [AssetDB] 修复 jpg 格式的贴图资源无法被删除或改名的问题

- [Properties] 修复组件属性由数组类型改回普通类型时,属性检查器不会自动重置和刷新的问题

- [Properties] 修复 event-prop 无法指定 tooltip 的问题

- [Properties] 修复属性检查器上预览 Markdown 文件出错的问题

- [Properties] 允许多选节点后在属性检查器里批量修改属性

- [Properties] 修复 Script 内数据结构内继续嵌套 array 之后无法显示的问题

- [Properties] 修复 Properties 查询超时后,面板停止了 node 的状态更新,直到重新点击 node 后,才重新启动更新的问题

- [Properties] 修复在组件的脚本资源栏上点击无法跳转到脚本资源所在位置的问题

- [TypeScript] 升级内置 typescript 编译器到 2.4 版本

- [Store] 改进扩展商店下载体验,增加了安装失败和解压失败的时候的提示,使用扩展包名作为下载压缩包的文件名。

- [Store] 插件商店产品描述支持 markdown 格式

- [Store] 改进扩展商店体验

- 修复重复下载文件的时候出现报错的问题

- 加快删除文件夹的速度(之前用 Utils.remove 每个文件删除的时候都有延迟,只有删除 watch 的文件夹需要用)

- 安装失败后,提示复制到某个文件夹后,自动打开这个文件夹

- 把 Editor.error 统一换成 Editor.warn

- 增加安装完成后的提示

- 统一整理了一下错误的打印消息,出现错误的时候,都会显示一个 warn

- 允许同时安装多个插件

  引擎

- [Engine] 添加 `Node.insertChild` 接口,用于插入节点到某一层级下特定位置。

- [Engine] 使用 SocketRocket 第三方库代替原来 iOS 上的 WebSocket 实现

- SocketRocket 提供异步 API,更符合通讯习惯

- 封装了跨线程通讯

- 网络状态变更时不会造成连接关闭

- 锁定手机设备屏幕不再造成报错

- 不再依赖包体较大的 openssl 库

- 使用 wss 连接时不再需要本地 CA 根证书

- [Engine] 修复使用 `evalstring` 调用的方法返回类型为 void 时会出错的问题

- [Engine] 修复 Spidermonkey v52 在 iOS 模拟器上创建 TypedArray 崩溃的问题

- [Engine] 修复 loadResDir 加载好的资源排序不稳定的问题

- [Engine] 修复 Mask 的 IMAGE_STENCIL 模式在场景勾选延迟加载资源时失效

- [Engine] 支持在项目中使用 CC_BUILD 和 CC_DEBUG 预编译宏

- [Engine] 修复 Mask 的节点 setContentSize 无效果的问题

- [Engine] 修复 jsb 不兼容 TypeScript 里的 promise 用法问题

- [Engine] Fix potential crash after WebSocket.close and send onclose event after onerror is received

- [Engine] 移除引擎裁剪后残留在包体中的 ZipUtils 和 TiledMap 有关模块(减小核心包大小)

- [Engine] 为 SGLabel 增加对象池,减少内存开销,提升反序列化效率。

- [Engine] Fix DebugInfos not included in jsb issue

- [Engine] Fix director event before update missing issue (user reported issue)

- [Engine] Increase default max batch vertex count (improvement)

- [Engine] 修复 `cc.game.restart()` 调用会导致崩溃的问题

- [Engine] 只有在预览和调试模式下才获取 webgl 错误,减少发布版的性能损耗

- [Engine] 修复 `color.fromHEX` 输出的颜色值不正确的问题

- [Engine] 修复一个 component 有多个 schedule 的时候 unschedule 可能出错

- [Engine] 修复 XMLHttpRequest timeout 无法设置的问题

- [Engine] 修复粒子和拖尾效果的 z 值不正确的问题

- [Engine] 预览游戏切换场景时增加更多调试信息,包括场景资源 uuid 和初始化每一步骤所用的时间

- [Engine] 创建新的 Label 渲染对象时,使用对象池而不是 new

- [Engine] 修复原生平台上使用 LabelOutline 时退出游戏会导致崩溃的问题

- [Engine] 统一 scheduler 在 web 和原生的参数签名,必须使用6个参数或4个参数才能正确工作。

- [Engine] 修复编辑器里加载粒子资源时报错的问题

- [Engine] 修复 `cc.game.restart` 会导致 Web 平台崩溃的问题

- [Engine] 升级了引擎编译时使用 `gulp-uglify` 版本,如果用了自己定制的引擎,需要同步引擎 repo 的 `package.json` 并重新安装最新依赖。

- [Engine] 修复 tint action 同时改变了 alpha,导致从 sgNode 同步 color 到 Node 过程中传递的 color.a 不等于 255 而报错的问题

- [Audio] 修复某些版本的 IE 11 在 audio 没加载完成的情况下,设置 currentTime 会报错的问题

- [Audio] 修复 AudioSource 初始化时加载声音操作可能造成声音播放停止的问题

- [Audio] 修复设置音量为 0 时无效的问题

- [Audio] 修复多条音轨同时播放并频繁调用 `_play2d(AudioCache *cache, int audioID)` 时的崩溃问题。

- [Audio] 修复 Audio DOM 模式在构建的时候执行 md5 cache 后,找不到资源的问题

- [Render] 默认关闭脏矩形渲染优化,可以通过设置 cc.renderer.enableDirtyRegion(true) 来开启。

- [Action] 解决 ActionManager 在 update 过程中删除 action 导致的报错,包括:salvaged 状态去除之后,没有对正在执行(可能被移除)的 action 做保护;action 被移除后(放入对象池)可能会立即被复用,导致 ActionManager 中的状态问题。

- [Action] 修复当 callFunc 的 target 为 null or undefined 时,jsb::Object 仍然会去 bind proxy 导致报错的问题

- [Action] 修复带基本数据类型参数的 callFunc 创建崩溃

- [JSB] Improve setTimeout, setInterval implementation

  组件

- [Label] 优化 BMFont 解析速度,目前 BMFont 的解析直接在编辑器导入的时候就完成了,不需要运行时解析。

- [Label] 拆分 `setFontFileOrFamily` 为 `setFontFamily` 和 `setFontAsset`

- [Label] 改进 TTF 字体的创建效率

- [BMFont] 改进具有多张贴图的 BMFont 资源,在索引贴图时可能出现路径太长出错的问题

- [BMFont] 修复在原本使用位图字体的组件上点击 useSystemFont 导致会出现 2 个 Label 的问题

- [RichText] 修复禁用 RichText 组件或节点时没有反注册点击事件的问题

- [PageView] 添加新属性 pageTurningSpeed

- [Spine] 支持 Spine 多骨骼之间的批处理渲染

- [Spine] 修复 Spine 原生平台上使用 addAnimation 后动画可能无法正确播放的问题

- [Tiledmap] 修复原生平台上 TiledMap 在使用 getPropertiesForGID 时,如果该图块没有设置 Custom Propertie 时会报错的问题

- [Tiledmap] 修复 Tilemap 不能正确被 camera culling 的问题

- [Tiledmap] 添加到 camera 上的时候,退出场景时,camera 无法清除 Tiledmap 的 sgNode

- [Tiledmap] 开启 DepthTest 让 tiledmap Z 轴生效

- [Animation] 修复修改 sample 属性时报错的问题

- [Animation] 优化帧动画性能

- [Component] 修复在包含渲染组件的节点上添加 SpriteDistortion 组件时的报错

- [Component] 增加 cc.BlockInputEvents 组件便于遮挡 UI 事件

- [Particle] 修复当粒子的 file 为 null 的时候无法导出资源的 bug

- [Particle] 修复 endColorVar 属性显示丢失的问题

- [Physics] 修复使用 Joint 时由于调用 destroy 方法导致的崩溃问题

- [Physics] 为 PhysicsManager 添加 `enabledAccumulator` 选项,用于提供固定时间的物理更新

- [Physics] 默认关闭添加 polygon collider 时就自动识别图片生成顶点,如果用户需要,可以通过点击按钮来生成顶点

- [VideoPlayer] 修复 VideoPlayer 在构建的时候执行 md5 cache 后,找不到资源的问题

强烈推荐小伙伴们下载升级v1.6版本,它解决了Creator用户一直以来迫切需要但又暂未处理的问题。升级完,记得到社区提交使用感受哦!

参与讨论

登录 后参与讨论

搜索博客