Cocos Creator Cocos2d-x AnySDK

Cocos Creator

Cocos Creator是以内容创作为核心的游戏开发工具,在Cocos2d-x基础上实现了彻底脚本化、组件化和数据驱动等特点。
Cocos Creator基于开源框架Cocos2d-x,实现了一体化、可扩展、可自定义工作流的编辑器,并在Cocos系列产品中第一次引入了组件化编程思想和数据驱动的架构设计,这极大地简化了Cocos2d-x开发工作流中的场景编辑、UI设计、资源管理、游戏调试和预览、多平台发布等工作,是使用Cocos2d-x进行团队协作开发的最佳选择。

2017年06月16日
V1.5.1 版本

这个版本我们修复了大量用户反馈的问题,其中影响较大的重要问题包括:

1. 改善了资源加载时的回调机制,原生和 Web 加载场景时速度可提高 2~3 倍

我们发现在加载场景资源时,下载进程可能会出现不必要的异步等待,在 1.5.1 里我们修复了这一问题,并且使得资源加载速度相比 1.4 版本更加快速。下面的图表是新版本在某实际原生项目中的加载表现。

downloader

2. 在 iOS 平台关闭 openssl 库中的 async 功能,避免苹果商店由于程序使用了 (setcontext, getcontext, makecontext) 等接口而遭拒。

近期苹果商店审查时对于 API 使用的要求越来越严格了,我们也会持续关注苹果审核标准,并从引擎层面解决可能存在的 API 使用问题。

3. 增加构建选项 “合并图集中的 SpriteFrame”,默认不勾选,解决 1.5.0 构建原生平台时载入游戏速度可能变慢的问题。

1.5.0 中我们会默认合并图集中的 SpriteFrame,这样会导致当资源量很大时产生需要很长时间解析的资源描述文件,如果用户对于资源请求数量要求不高,但希望首屏能够快速加载时,可以取消这一选项。

build

更多完整列表,点击这里

2017年05月23日
V1.5.0 版本

这次,我们着重补强了Cocos Creator之前在动作游戏和大型项目开发方面的不足,通过提供物理引擎、摄像机和TypeScript的支持,Cocos Creator现在能够更好的开发各类动作游戏和大型工程。

除了以上社区期待度很高的新功能之外,我们再一次优化了引擎加载的逻辑,大幅提升了场景加载和解析的速度;另外我们重构了Windows桌面和Android平台上Label和输入框的实现,大幅增强了使用体验和兼容性。相信拥有强大功能的Cocos Creator v1.5,会为你接下去的开发工作如虎添翼。

Cocos Creator v1.5 主要更新亮点包括:

- 集成Box2D物理引擎 ,加入刚体和关节组件

- 加入摄像机组件,可以在无损性能的情况下支持高速卷屏

- TypeScript和ES6 Class支持,全面强化IDE代码提示

- 优化场景加载流程,场景加载速度提高38%

- 跨项目导出/导入资源,自动关联资源依赖

- 增强Label和EditBox在Windows桌面平台和Android平台的使用体验和兼容性

- 热更新支持中断后续传

下面我们将详细介绍Cocos Creator v1.5重点功能更新。

集成 Box2D 物理引擎

Cocos Creator 在 1.5 版本中终于集成了知名的物理引擎 [Box2D](https://github.com/erincatto/Box2D),这款容易上手功能强大的物理引擎将为 Cocos Creator 带来全面的物理检测和运算能力,全面支持你的动作和物理游戏。

除去通用的物理引擎功能之外,Cocos Creator 集成后的物理系统中还加入了刚体(Rigidbody)和关节(Joint)组件,加上专门为物理引擎定制的碰撞体(Collider)组件,我们仅仅通过在场景中摆放各种不同的物理组件,就可以实现有趣的交互效果了。配合新加入的 Camera 摄像机组件,在编辑器中完成丰富关卡内容的平台动作卷屏游戏将会非常轻松!

physics_scene

摄像机组件

开发动作和冒险类游戏时,视角的移动和场景的卷屏必不可少,之前开发者们只能通过整体移动场景里所有节点来模拟视角移动的效果,但大量节点位移的运算会影响性能,尤其是在加入物理引擎之后,每次移动碰撞体都会导致重新生成和计算物理世界。

而在 1.5 版本中加入的 Camera 组件就能够完美解决视角移动的问题,Camera 组件中可以指定一个或多个节点作为被摄像机渲染的目标,将场景的根节点拖拽到 Camera 的目标列表中,之后移动 Camera 组件所在节点,就可以实现场景卷屏的效果。Camera 的渲染是通过矩阵运算来实现的,因此不会对场景中的运动计算带来额外的开销,可以说是 2D 动作游戏卷屏的完美解决方案!

camera

TypeScript 和 ES6 Class 支持

为了更好的支持各类 IDE(如 VS Code, WebStorm 等)里的游戏脚本代码提示,我们在 1.5 版对 cc.Class 的声明方式进行了一次重构,现在可以在 Cocos Creator 项目里使用 ES6 Class 或 TypeScript 来声明组件和编写游戏逻辑了。

之前很多有静态语言使用经验的用户在上手 Creator 时反馈代码提示和自动完成功能较差,无法准确的提示组件的成员属性和方法,以及引用其他脚本时也无法提示被引用脚本里的成员。这主要是由于编辑器序列化数据需要的特殊声明格式和各大 IDE 能够识别的原生语法不符合。而在这次重构中我们引入了装饰器语法来帮助编辑器进行数据识别,之后我们就可以使用 ES6 和 TypeScript 的标准语法声明 cc.Class 和 cc.Component 了。使用标准语法声明的 cc.Class 所有成员类型都能够被各种主流 IDE 自动识别,加上引擎 API 类型声明文件 creator.d.ts,使得目前 Creator 脚本开发时可以正确提示几乎所有的相关接口代码!

TypeScript 支持强类型声明,对于多人协作开发的大型项目来说,也能够提供更准确的接口通讯规范和错误报告。推荐有相关强类型语言开发经验和大型项目的技术团队尝试!

auto_complete

场景加载速度提升 38%

Web 版游戏的最大优势就是免安装,即开即玩,因此 web 版游戏场景的加载速度,尤其是初始场景的加载速度对于用户体验和留存都至关重要。本次更新在场景资源加载方面进行了大幅优化,使用对象池让原来在 uuid-loader 和 deserialize(反序列化)模块中的对象创建频率大大减少,在本地预览时场景加载速度提升幅度达到 38%。但实际项目中加载速度的瓶颈可能来自网络连接速度,所以实际游戏中的提升幅度可能没这么大,但基本也能有 200ms~300ms 以上提升。

跨项目资源导入/导出共享

在前一个版本中,我们通过扩展插件的系统实现了项目间共享一个资源路径的功能,但还有更多朋友希望我们能够提供一种更简单直接的,跨项目导入导出资源的机制,来实现将已有项目中的资源导入到新项目,或者美术人员和开发人员的项目分开,并通过导出导入来生产和整合美术资源的生产线。

通过主菜单的「文件 -> 导入/导出资源」打开的资源导入导出工具,我们可以轻松的导出场景或 Prefab,选择导出目标后会自动列出该场景和 Prefab 依赖的资源,导出时自动生成 zip 包。在另一个项目中导入该 zip 包即可。如果遇到 uuid 冲突还可以选择自动更新 uuid 以保留两个版本的资源。

export

完整改动列表

编辑器

- [Scripting] 支持 TypeScript 脚本,支持使用 ES6 Class 声明 cc.Class 和组件,全面强化 IDE 里的代码提示功能

- [Editor] 增加导入导出项目资源功能,从主菜单的 `文件` 中可以打开导入导出界面

- [Editor] 属性检查器里预览大尺寸代码文件时只显示一部分,改善浏览大尺寸文件时的编辑器性能

- [Editor] 导入为插件的脚本资源添加选项「在编辑器里加载」,用于标记部分插件脚本在编辑器免加载,来提高场景打开的效率

- [Editor] 为所有项目脚本默认导出所有 CCClass

- [Editor] 自定义引擎路径加载失败时,报错并尝试使用内置引擎

- [Editor] 修复修改场景后退出编辑器,弹出保存提示时无法正确保存场景或取消退出的问题

- [Editor] 在预览服务器增加 `update-db` 接口,通过预览网页或外部命令访问此接口就可以在不激活编辑器窗口的情况下编译脚本和更新资源。

- [Editor] 修复 Color 的 alpha 为 0 时会被反序列成 255 的问题

- [Editor] 修复首次保存场景时取消保存文件时会报错的问题

- [Assets] 修复 sub-meta 导入失败时并没有显示报错信息的问题

- [Assets] 在资源的右键菜单增加「打开 Library 中的资源」选项

- [Assets] 修复创建 Prefab 时可能出现 `TypeError: s.canAddChild is not a function at assets-tree._onDropAreaMove` 的错误

- [Build] 修复使用 binary 模板构建和编译 window 和 android 平台时可能出现的编译失败错误

- [Build] 原生平台打包时,会把 Atlas 里的 spriteFrame 资源合并成一个 json

- [Build] 修复使用 binary 或 link 模板编译 android 工程会有 warning 的问题

- [Build] 修复命令行构建时,如果预览网页没有关掉的话会报错的问题

- [Build] 修复有些情况下构建时选择 `内联所有 SpriteFrame` 后构建文件数量增多的问题

- [Build] 支持使用 Android Studio 2.3+ 和 Build Tools 25 构建安卓项目

- [Build] 修复 windows 上 AutoAtlas 没有正确生成 spriteFrame 信息到 `settings.js` 的问题

- [Build] 在插件中可注册构建和编译完成时的回调

- [Build] 修复构建 Android Studio 工程时 `local.properties` 里 ndk.dir 字段名不正确的问题

- [Build] 支持使用 Visual Studio 2017 构建原生工程

- [Prefab] 在 Prefab 资源上也增加资源延迟加载选项

- [Prefab] 修复自动同步 prefab 引用了其他 prefab 资源时,保存场景时报错的问题

- [AutoAtlas] 修复在 assets 目录下创建 AutoAtlas 后,resources 里的 spriteframe 信息没有被添加到 settings.js 中的问题

- [ProjectSettings] 修复更新分组后,节点属性面板无法及时更新的问题

- [ProjectSettings] 修复项目设置中模拟器横竖屏设置无效的问题

- [Preferences] 修复偏好设置->原生开发环境,未指定 javascript 或 cocos2d-x 引擎路径时仍可保存设置的问题。

- [Preview] 更换了 web 平台预览时 FPS 显示的方式,增加更多调试信息

引擎

- [Render] 将 `cc.macro.FIX_ARTIFACTS_BY_STRECHING_TEXEL` 改回 0 来修复贴图周围像素会被切掉的问题,但这个修改会导致 tiledmap 在缩放和平移时可能产生黑边,需要在生成 tiledmap 贴图时对每个格子进行一像素的拓边(如果使用 shoebox 生成贴图,需要将 extrude 设为 1,padding 设为 2)

- [Engine] 优化了 web 平台加载引擎时的反序列化和下载资源操作,本地预览时场景加载速度提升 38% (远程加载资源时仍需考虑连接速度的瓶颈,实际提升可能低于这个数字)

- [Engine] CCClass 里的 editor 字段添加 executionOrder 字段用于控制脚本执行顺序

- [Engine] cc.loader.loadResAll 已更名为 loadResDir,增加 loadResArray 接口,用于传入相同类型的资源 url 数组

- [Engine] 在 iOS 设备上开启了多点同时触摸事件的支持,现在可以正确使用双指缩放等手势功能了

- [Engine] 修复 EventHandler 组件里的 customEventData 在脚本中赋值为 0 无效的问题

- [Engine] 修复 Sprite 组件激活前 capInsets 设置无效的问题

- [Engine] 修复原生平台使用相对路径加载 tmx 文件引用的贴图时报错的问题

- [Engine] 优化 DOM Image 内存使用,在 handleLoadedTexture 后删除 dom image,并用对象池复用 dom image 来降低 memory footprint

- [Engine] 在 cc.Node 上添加 `pauseAllActions` 和 `resumeAllActions` 接口

- [Engine] 在 cc.Node 上添加 `pauseSystemEvents` 和 `resumeSystemEvents` 接口

- [Engine] 升级 C++ 引擎的 Audio 和 Network 相关代码库,和 cocos2d-x 3.15 同步

- [Engine] 修复使用 LabelAtlas 字体资源的场景延迟加载会闪退

- [Engine] 修复了动态加载 Prefab 后,调用 cc.loader.release 不能正确释放 prefab 引用资源的问题

- [Engine] 修复在 onLoad 中禁用节点时有可能导致后续的 onLoad 没触发的问题

- [Engine] 修复当 Scale9Sprite 的 width 或 height 为 0,并且使用 sliced 模式的时候,会导致数据计算出错的问题

- [Engine] 修复对部分 UI 节点调用 removeFromParent() 后卸载场景时,UI 对象的 cleanup 函数不会被调用,导致原生平台上 ui 控件的内存无法被清除的问题。

- [Engine] 修复将非激活节点加入节点树时,节点上注册的事件可能会被触发的问题

- [AssetManager] 在进度回调中添加更多进度信息,包括:总字节数,已下载字节数,总文件数,已下载文件数,是否是从续传恢复。

- [AssetManager] 修复 `setVersionCompareHandle` 在 `init` 过程中无法生效的问题

- [AssetManager] 支持动态创建 manifest 文件,并手动加载本地和远程 manifest

- [AssetManager] 修复中断热更新后重启会失败,以及重启后重新更新无效的问题

组件

- [Physics] 支持 box2d 物理引擎

- [Camera] 增加 Camera 组件

- [Animation] 修复使用 cc.instantiate 克隆带动画节点时,动画的 playOnLoad 不生效的问题

- [Animation] 修复 animation delay 设置无效的问题

- [Animation] 修复将 Animation 所在节点移出节点树后再调用节点的 destroy 操作时,Animator 对象内存可能泄露的问题

- [Animation] 修复在动画编辑模式下新增 component 并且编辑会造成报错的问题

- [Animation] 修复在设置 uuid 为空的 asset 的时候,会引起报错的问题

- [Animation] 修复动画编辑模式下,更改删除 clip 会导致 Creator 崩溃的问题

- [Particle] 修复粒子组件设置了自动释放时出现报错的问题

- [Particle] 修复使用动画编辑器编辑粒子位置的时候出错的问题

- [BMFont] 修复导入的字体文件中贴图所在路径是绝对路径时导入会报错的问题

- [Label] 重构了 Label 在 windows 桌面平台的实现,解决以下问题:

- 自动换行,Shrink 等文字排版效果无效

- 单行文本框输入内容时显示为多行

- 文本框输入时只会显示前面几个字符

- 多行文本框输入时文字无法置顶对齐

- [Label] 修复 iOS 平台 shrink 模式下面文字显示不全的问题

- [Label] 使用系统字体时可使用 `fontFamily` 属性指定字体类型

- [Label] 修复 BMFont 在原生平台上会造成内存泄露的问题

- [Label] 修复 bmfont 切换字体时,spaceX 属性失效的问题。

- [Toggle] 修改了 Toggle 组件发送事件的时机,在其他 toggle 的状态改变之后才会发送事件

- [Toggle] 在 isChecked 时现在会设置目标节点的 active 而不是设置目标节点的 Sprite.enabled

- [ToggleGroup] 现在在需要启用时候才调用 `addToggle`

- [EditBox] 重构了输入框在 windows 桌面平台的实现,直接在游戏界面里输入文字,不再需要弹出对话框

- [EditBox] 改进 EditBox 在 Android 平台上的兼容性问题:修复第一次点击输入框时可能无法弹出键盘的问题;修复输入前后字体大小不统一的问题;修复切换输入框的单行和多行,对齐方式不正确的问题。

- [EditBox] 修复 `textChanged` 事件回调次数在真机上面不正确

- [EditBox] 修复在 `textChanged` 事件中修改 string 属性时原生平台会显示文字重影的问题

- [EditBox] 修复事件回调里面调用 EditBox.string,光标位置不正确的问题;修复动态切换单行和多行模式,编辑框窗口适配不正确的问题。

- [ScrollView] 修复滚动到边界的事件在设置回弹后可能发送多次的问题

- [ScrollView] 修复惯性滚动回弹不到初始位置的问题,修复脚本中执行 `removeFromParent`,然后再添加到节点树后无法滚动的问题

- [VideoPlayer] 为 iOS 平台增加嵌入式播放(inline)功能

- [VideoPlayer] 修复在 iOS 10 系统的 web 平台无法播放视频的问题

- [VideoPlayer] 在 toggle visibility 的时候,不再移除 dom,而只是修改 visibility

- [WebView] 修复 webview 在 ios 浏览器上面显示大小不正确的问题

- [WebView] 修复 webview 在 chrome 58 上面可能会报错的问题,`toggleVisibility` 时不再移除 dom 节点

2017年04月01日
V1.4.2 版本

版本信息

- [Build] 修复构建时内联 SpriteFrame 选项无效的 Bug

- [Label] 修复拖拽 BMFont 资源到 Label 时的报错问题

- [AutoAtlas] 修复打包后 AutoAtlas 中的 spriteFrame 无法正确获取裁剪透明像素前大小的问题

- [AutoAtlas] 修复碎图中包括旋转后的 spriteFrame 时打包时会报错的问题

- [Widget] 修复 Widget 选中 alignOnce 后在运行时调用 updateAlignment 无效的问题

- [Editor] 修复了项目脚本量较多时可能出现 sourcemap 定位错误的问题

- [Editor] 修复特定 prefab 回退时会导致编辑器卡死的问题

- [Editor] 修复编辑器加载插件脚本时,typeof module === 'undefined' 判断会出错的问题

- [Editor] 修复在碰撞分组面板切换分组配对勾选状态时,没有更新配对组的状态的问题

- [Editor] 修复删除场景后可以继续操作节点属性,并导致报错的问题

- [Editor] 增加 cc.Texture2D 资源类型的数组属性支持

- [Editor] 修复了含有下拉菜单的组件在使用功能菜单里的 MoveUp/MoveDown 后,下拉菜单变为空的问题

- [Build] 修复碎图太多时项目构建可能会卡死的问题

- [AutoAtlas] 自动图集 工具增加扩边选项,修复小图片放大后边缘出现模糊的问题

- [AutoAtlas] 使用工程中的临时目录 temp 存储生成图集时的临时文件

- [AnySDK] 修复了移除 AnySDK 框架后构建原生项目会黑屏的问题

- [Assets] 修复通过拖拽更新已存在的 fnt 资源会报错的问题

- [Assets] 修复重命名资源时会报 _Scene 找不到的问题

- [Engine] 修复 cc.director.setClearColor 传入浮点数失效的问题

- [Engine] 修复 Clipping 性能严重下降的问题

- [Engine] 修复重复调用 setFrameRate(30) 可能导致帧率上升的问题

- [Engine] 修复用 url 加载 raw texture 的时候 loading item 没有设置 isRawAsset 的问题

- [Engine] 修复 JSB 环境下 setInterval 和 setTimeout 没有正确绑定的问题

- [Engine] 修复在 iOS 上包裹在 iframe 中的 cocos 游戏转屏时屏幕适配异常

- [Engine] 移除文档中未实现的 cc.game.onStop 接口

- [JSB] 修复了空场景放置内存上升的问题

- [Action] 修复 cc.sequence 可能导致崩溃的问题

- [DragonBones] 修复 playAnimation 指定播放次数的参数可能无效的问题

- [DragonBones] 修复 DragonBones 5.0 更新 z 轴排序会导致无限添加子节点的问题

- [EditBox] 修复输入框在部分浏览器上无法自动恢复屏幕朝向或者游戏位置等兼容性问题

- [Label] 为位图字体增加字间距属性 spaceX

- [Spine] 为 RegionAttachment 和 MeshAttachment 接口提供 JSB 绑定

- [Prefab] 修复自动同步的 prefab 在编辑过程中修改脚本引起的错误

- [Spine] 改善了 Spine 动画中 slot.attachment 接口的 JSB 绑定

- [Loader] 修复了原生环境下使用 cc.loader.load 加载远程图片时崩溃问题

- [BMFont] 优化了 BMfont 字体信息的解析过程,增加缓存

2017年02月16日
V1.4.0 版本

实例化性能提升,动画、UI再增强

如果说世界上有什么天坑是填不完的,那必须得是性能优化和功能增强。因为赶上岁末年初,1.4版本让大家经历了前所未有的长时间等待,但我们也因此拿出了史上最长的改动列表,其中对社区最关心的几个问题都有完善和改进,包括:

  • 节点实例化性能增强
  • 骨骼动画支持网格渲染
  • UI 文字增强,包括艺术数字支持、位图字体批量渲染、富文本描边等
  • 插件商店上线,开放更多插件接口
  • 热更新问题大量修复,接口增强
  • 增加原生音频软解码方案,提高兼容性
  • 增加 VS Code 调试网页版游戏工作流支持

除了已经确定会随 1.4 版本发布的功能外,其他社区期待度很高的功能也在这个周期内进行了前期开发,比如物理引擎就将确定能够在 1.5 版本和大家见面。未来一段时间我们的工作重点仍然是提升引擎性能和编辑器稳定性,更多的功能扩展将转移到插件系统中实现,并通过插件商店和大家见面。

下面我们将详细介绍 1.4 版本的重大改动。

性能大幅优化

节点实例化是游戏开发中必不可少的程序操作,即使使用了如节点池之类循环使用节点的方法,实例化的效率也关系到加载和初始化场景时的等待时间。

在 1.4 中我们针对实例化操作进行了两方面的优化:预编译 CCClass 构造函数,加快创建 Class 的速度;拷贝对象时不再进行属性判断。在原生平台上达到了 80% 以上的性能提升,在其他平台提升也超过了 50%,详见下图。

instantiate

除了运行时能够享受到的巨大性能提升之外,此次优化也大幅提升了编辑器中打开复杂场景时的速度。

另外针对 Web 平台,我们也合并了 cocos2d-x 3.14 版本中的重要优化,包括:

  • 减少 visit 的调用栈深度
  • 减少 onEnter/onExit/cleanup 的调用栈深度
  • 降低 ActionManager/Scheduler/EventManager 的内存使用
  • 降低 Color 内存使用
  • 优化 RenderCmd 和 SGNode 构造性能
  • 减少 updateProjectionUniform 调用
  • 优化 Vertex 数据计算性能

Spine 和 DragonBones 支持网格渲染

骨骼动画中使用网格渲染(Mesh)来提升表现力已经越来越常见了,因此从推出 Spine 骨骼动画支持开始,社区内要求支持网格渲染的呼声就一浪高过一浪。1.4版本的引擎中一次性的升级了 Spine 和 DragonBones 两大骨骼动画格式的运行时库,在 WebGL 渲染模式和原生平台上都可以完美显示网格渲染了。

spine-mesh

要注意的是由于 Spine 和 DragonBones 的运行库都升级到了最新版本,所以在生产动画数据的时候也需要最新版本的 Spine 和 DragonBones 软件才能正常使用。另外 Canvas 渲染模式是不支持网格的,只能在 WebGL 和原生平台使用。

UI 文字显示增强,性能提升

UI 方面最大的进步在于位图字体现在可以参与批量渲染了!批量渲染的原则和 Sprite 相同,也就是共享同一张贴图的所有 Label 和 Sprite,只要他们中间没有插入使用其他贴图的渲染内容,就可以在一个渲染批次中完成。

现在用一个 draw call 画出整个背包界面也不是梦想了,只要如下图所示,把位图字体和对应的贴图,和其他 UI 用的贴图打包成一个图集,然后在 WebGL 和原生环境下就会自动进行批量渲染。

bmfont-batching

上图中我们用了编辑器自带的自动图集功能,将同一个文件夹下的 Sprite 贴图和位图字体贴图进行了打包,这种情况下要构建项目后才能看到批量渲染的效果。

除此之外 UI 方面的增强还包括:

  • 新增艺术数字资源(LabelAtlas),直接拖拽到 Label 组件里的 font 属性就可以使用
  • 大幅提高了 EditBox 的稳定性,修复了多个平台上的各种问题
  • RichText 增加描边功能,使用 <outline> 标签
  • Widget 支持指定对齐对象

插件商店上线,新插件开发工作流程公布

插件商店正式上线了,目前可以在商店里看到由 Creator 开发团队业余时间开发的十几个编辑器插件,使用 Cocos 开发者帐号登录编辑器后即可进行自动化的下载安装。

store

尽管 Creator 早就开放了插件系统,但相关的接口和文档仍然一直在完善过程中。随着 1.4 版本插件商店正式上线,我们也新增了两个重要的插件系统工作流程:

  • 可以在插件中包括运行时的组件和资源,这些组件和资源在加载插件后就会自动载入项目数据库,方便用户在多个项目之间共享控件和资源。
  • 插件中可以调用引擎接口来访问场景中的节点、组件和其他运行时脚本

这两个全新的工作流程将使得插件更容易对场景和资源进行自动化的管理,增强插件系统在普通游戏项目中的实用性。插件商店上线后也欢迎开发者们提交自己的插件,通过这个平台和社区一起共享知识和资源。

在后续版本中我们会持续对插件系统的接口进行增强和完善。

热更新问题修复,接口增强

1.4 版本中我们开始对热更新进行整改,这个阶段主要修复 bug 和完善热更新接口的原生绑定,以方便开发者自己定制热更新行为,具体的改动包括:

  • (重要)彻底隔离临时更新文件夹和本地缓存文件夹,避免前者失败时污染后者,在确认新版本更新完成时才会将临时更新文件夹合并到本地缓存文件夹中(不会删除旧的本地缓存文件)
  • (重要)绑定 Downloader file task 接口(不支持 data task)
  • (重要)压缩文件的解压逻辑前置到 fileSuccess 之前,保障解压成功才算是文件正确更新
  • 用 manifest 中的 size 字段来收集文件大小数据,更快获得准确的字节级进度
  • 修复 Android 断点续传支持和一些特殊情况下的更新 bug
  • 支持 manifest 间比较的 API:setVersionCompareHandle
  • 支持下载文件后的校验回调:setVerifyCallback
  • 支持设置更新时最大文件并发数 setMaxConcurrentTask
  • 保障 tempManifest 的正确保存,使得进度信息可以正确存储
  • 延迟文件请求到文件夹创建逻辑之后,确保路径正常
  • 读取 App Package 内部 manifest 时强制清空 search path,避免读取到缓存 manifest

后续我们还会结合编辑器进一步改善热更新工作流程,包括提供插件自动生成 manifest 文件,以及支持通过编辑器定义资源包,进行多份 manifest 的可选择更新等等,敬请期待。

增加原生音频软解码方案,提高兼容性

由于音频解码程序和部分安卓芯片不兼容,为了解决在部分安卓系统上播放音频时出现的崩溃问题,我们新增了两个软件解码的第三方库,分别对应 mp3 和 ogg 格式,使用软件解码也同时会提升播放以上格式音频时的效率。

VS Code 调试网页版游戏

VS Code 是 Creator 的首选编程开发工具,但之前的版本中调试游戏程序时只能使用 Chrome 内置的 DevTools 工具,调试时不能对源码进行即时的修改,另外浏览器调试也容易占用过多资源造成卡顿。

在 1.4 版本中我们增加了 VS Code 的调试工作流程,通过菜单一键配置调试参数,并且改善了编译脚本后的 sourcemap 生成逻辑,减少错误。现在可以通过 VS Code 对网页版游戏进行完整的调试工作流程了!

完整改动列表

接口改动

编辑器

  • [AutoAtlas] 现在自动合图里每张图片资源的 uuid 会保持不变
  • [AutoAtlas] 优化合图,支持剔除当前文件夹没有被引用的图片选项
  • [Assets] 保存场景、动画、prefab 资源时会自动将这些资源备份到项目工程的 temp/BackupAssets 目录中,并可通过资源管理器中右键菜单恢复到备份的版本
  • [Assets] 修复超时带来的构建时 asset-db:query-assets 报错
  • [Assets] 渲染层 AssetDB 模块增加接口 createOrSave,会在资源路径不存在的情况下创建资源,否则更新保存资源。
  • [Assets] 修复了按住 shift 多选资源时编辑器显示报错的问题
  • [Assets] 修复了启动包括外部修改过脚本的项目时,不会触发自动编译的问题
  • [Scene] 优化场景面板的任务执行机制,避免多个任务同时执行带来的冲突和数据丢失的可能。
  • [Scene] 修复了从控件库中拖控件到场景编辑器后 gizmo 无法响应拖拽的问题
  • [Preview] 为 Web 平台预览界面添加逐帧运行按钮
  • [Preview] 修复了启动预览后,编辑器内切换场景,无法再切换预览的场景的问题
  • [Preview] 修复了中文注释和 log 在 Chrome 上调试时会显示成乱码的问题
  • [Preview] 修复了场景重新编译后,预览时场景名出错的问题
  • [Prefab] 修复 Revert Prefab 时,Button 的 clickEvent 的 target 会变成 missing 状态 的问题
  • [Prefab] 修复了复制 Prefab 中的节点时,两个节点会关联同一份资源中的索引问题
  • [Prefab] 重命名 Prefab 资源后,实例化后的节点名现在也会跟着改变
  • [Prefab] 用户嵌套 Prefab 时会弹出警告,提示只有最上层的 prefab 会被保存,另外选中 Prefab 中的任何节点时,在属性检查器头部会显示所属 prefab 的名称
  • [Prefab] 修复不自动刷新的 Prefab 在运行时触发资源加载的问题
  • [Preferences] 增加了默认不对导入资源进行图片剪裁的选项
  • [Preferences] 偏好设置的常规面板中加入新创建的 Prefab 是否自动同步的选项
  • [Preference] 选择外部脚本编辑器的菜单增加「移除」按钮
  • [Preference] 修复自定义C++引擎路径下没有模拟器文件夹时,无法重新选择内置引擎的问题
  • [ProjectSetting] 修复了项目设置数据无法保存的问题
  • [ProjectSetting] 项目设置里添加 Canvas 默认分辨率和自适应 policy 设置
  • [ProjectSetting] 增加按照项目设置模拟器分辨率的选项
  • [ProjectSetting] 修复了项目设置中 预览运行 面板无法显示的问题,修复了引擎模块设置无法正确保存的问题
  • [Properties] 优化 slider 控件的步长设置, type 是 integer 的时候设置 precision = 0
  • [Properties] 修复点击组件标题栏右边的功能按钮(齿轮)时也会折叠属性的问题。
  • [Properties] 属性检查器增加 cc.Rect 类型控件支持
  • [Simulator] 模拟器菜单添加选项设置是否显示 FPS
  • [Sourcemap] 修复使用 Chrome 调试脚本时 sourcemap 源码内容错误的问题
  • [CodeEditor] 修复内置代码编辑器中按 Ctrl+Z,主窗口也会接收撤销事件的问题
  • [Console] 编译失败时,显示包括报错列的更详细的报错信息
  • [Editor] 在使用的自定义引擎版本和当前编辑器不兼容时,增加弹窗提示
  • [Editor] 更新控件库图标
  • [Editor] 修复从场景中删除某组件后,从项目中删除对应脚本仍然会报错的问题
  • [Editor] 修复了图片路径中包含中文时,可能会导致导入失败的问题
  • [Editor] 修复 UMD 脚本导入为插件后在编辑器中加载会报错的问题
  • [Editor] 修复在偏好设置内设置 「步进数值」无效的问题
  • [Editor] 关闭编辑器架构内核对部分 GPU 的黑名单列表,修复版本升级带来的更多显卡不兼容编辑器 WebGL 渲染的问题
  • [Editor] 修复了在编辑器中通过代码创建一个扩展名为 txt 的资源会报错的问题
  • [Editor] 修复了切换布局后,属性检查器会不停快速切换,以及切换布局前的选择不会清空的问题
  • [Editor] 为资源引用丢失报错增加详细的引用位置信息
  • [Editor] 场景中组件脚本丢失时,现在会提供详细的脚本引用位置信息
  • [Editor] 修复编译过程较长时容易出现 worker timed out 的问题
  • [Editor] 修复了导入为插件的脚本文件路径不支持空格的问题
  • [Editor] 为 coffeescript 资源增加了 sourcemap,解决新建脚本时报错的问题
  • [Editor] 修复了登录信息过期后不能及时提示重新登录的问题

引擎

  • [Engine] 对 instantiate 性能进行优化,除了提高运行时创建节点的效率外,也提高了编辑器里场景打开的速度
  • [Engine] 优化场景加载时的反序列化操作
  • [Engine] 合并 cocos2d-x v3.14 web 版优化,包括:
    • 减少 visit 的调用栈深度
    • 减少 onEnter/onExit/cleanup 的调用栈深度
    • 降低 ActionManager/Scheduler/EventManager 的内存使用
    • 降低 Color 内存使用
    • 优化 RenderCmd 和 SGNode 构造性能
    • 减少 updateProjectionUniform 调用
    • 优化 Vertex 数据计算性能
  • [Engine] 修复大量热更新问题,包括:
    • (重要)彻底隔离临时更新文件夹和本地缓存文件夹,避免前者失败时污染后者,在确认新版本更新完成时才会将临时更新文件夹合并到本地缓存文件夹中(不会删除旧的本地缓存文件)
    • (重要)绑定 Downloader file task 接口(不支持 data task)
    • (重要)压缩文件的解压逻辑前置到 fileSuccess 之前,保障解压成功才算是文件正确更新
    • 用 manifest 中的 size 字段来收集文件大小数据,更快获得准确的字节级进度
    • 修复 Android 断点续传支持和一些特殊情况下的更新 bug
    • 支持 manifest 间比较的 API:setVersionCompareHandle
    • 支持下载文件后的校验回调:setVerifyCallback
    • 支持设置更新时最大文件并发数 setMaxConcurrentTask
    • 保障 tempManifest 的正确保存,使得进度信息可以正确存储
    • 延迟文件请求到文件夹创建逻辑之后,确保路径正常
    • 读取 App Package 内部 manifest 时强制清空 search path,避免读取到缓存 manifest
  • [Engine] 允许 cc.loader.getRes 和 releaseRes 传入类型参数
  • [Engine] 重命名 cc.loader.loadResAll 为 loadResDir,明确传入参数是一个文件夹的 url,增加 releaseResDir 接口用于释放整个文件夹的资源
  • [Engine] 现在位图字体文件也可以被场景预加载
  • [Engine] 避免使用 https 加载资源时的贴图绑定错误
  • [Engine] 修复 loadRes 一个 prefab 后若资源还没拉取到,在下一个引擎 update 中 getRes 会得到错误的 prefab 的问题
  • [Engine] 修复了 cc.loader.load 请求失败时没有回调的问题
  • [Engine] 修复了加载 Prefab 时会出现反复加载同一个 JSON 资源的问题
  • [Engine] cc.Loader._cache 里使用资源的 url 索引资源,对于非 raw asset,url 在 AssetLibrary 中找不到的情况下,使用 uuid 作为索引
  • [Engine] 修复场景资源自动释放时,BitmapFont 对应的字体文件不会被释放的问题
  • [Engine] 修复模拟器会加载非原生插件脚本的问题
  • [Engine] 修复了 iOS 平台上 AudioDecoder 编译报错问题
  • [Engine] 修复了切换场景后,SystemEvent 无法重新注册,导致事件失效的问题
  • [Engine] 修复了小米 note 等机型上使用 x5 内核浏览器还会出现闪屏的问题
  • [Engine] 分离引擎内的日志和报错信息到外部文件中,打包 release 时不包括日志和报错信息字符内容,需要手动前往报错提示的 url 查找信息。
  • [Engine] 修复开启 Canvas 脏矩形渲染优化时,图像周围可能出现的黑边问题
  • [Engine] 通过从 release 版本剥离报错日志信息,和减少编辑器专用的代码,减少了约 80k 的引擎核心包体积
  • [Engine] 更新构建 Mac 桌面应用时使用的 glfw 第三方库,修复 Canvas 组件同时勾选 Fit Height 和 Fit Width 时在 Mac 平台的显示问题
  • [Engine] 修复 EVENT_GAME_INITED 事件触发时,引擎仍未初始化完成,导致调用 cc.loader.loadRes 失败的问题
  • [Engine] 修复 JSB 环境下 XMLHttpRequest 没有正确返回错误到 JS 回调,仅提示在原生层的问题
  • [Engine] 修复 cc.instantiate 时会引入 t1 之类的全局变量问题
  • [Engine] 修复 Action 对象在新内存模型中没有被引用,导致动作对象在垃圾回收时可能被误删的问题
  • [Engine] 在原生平台使用新的软件音频解码库,解决在部分芯片上解码 mp3 和 ogg 音频时崩溃的问题
  • [Engine] 修复 sprite 旋转到特定角度时,如果约束框超出 viewport 范围,会整个被自动剔除的问题
  • [Engine] 修复魅族系统浏览器无法开启 WebGL 模式的问题
  • [Engine] 修复嵌套 Mask 时使用 inverted 反向遮罩会出现显示错误的问题
  • [Engine] 修复了可能将加载的 mp4 视频文件按照音频解析导致的错误问题
  • [Engine] 修复了销毁带有 Missing Script 组件节点时的报错问题
  • [Engine] 修复了 cc.Color 设为红色时渲染不正确的问题
  • [Engine] 修复了 Prefab 可能出现加载失败的问题
  • [Engine] 修复了以 dom 模式加载音频时回调错误导致加载中断的问题
  • [Engine] color.fromHEX 接口支持只传入 rgb 数据
  • [Audio] 修复了在 iOS 平台设置声音音量时可能会导致音频不受控制的问题
  • [Audio] 修复了音频资源加载时的可能会出现请求数量增加的问题
  • [Loader] 修复部分情况 raw assets 没有被正确设置类型的问题,对于带参数的 url,资源 id 应该是原始的 url,不应该对字符串进行修改
  • [Loader] 修复 cc.loader._getReferenceKey 接口获取结果错误导致无法正常自动释放资源,也无法正常设置资源不可释放的问题
  • [Loader] 修复 LoadingItem.dependKeys 可能出现重复内容的问题
  • [JSB] 修复部分转换函数可能被传入空指针导致崩溃的问题

组件

  • [Label] 支持位图字体和其他 Sprite 一起进行批量渲染,只需要把 bmfont 使用的贴图和其他 Sprite 用的贴图放在同一个自动图集配置路径下就可以生效
  • [Label] 增加了新的字体资源类型 LabelAtlas(艺术数字),和原来 cocos2d-x 引擎的 LabelAtlas 配置方法相同
  • [DragonBones] 添加了 mesh 显示的支持
  • [Spine] 升级 Spine 的 JS 运行时到 3.x 版本,支持 Mesh 显示
  • [Spine] 升级 C++ 引擎中的 Spine runtime 到 3.5.35,和 JS 版引擎保持一致
  • [Widget] 增加了 target 属性,可以指定一个非直接父级节点(可以是父节点的父节点)
  • [Widget] 添加 updateAlignment 接口,用于手动刷新对齐
  • [Widget] 修复所在节点缩放为 0 时,width 会变成无穷大的错误
  • [TiledMap] 修复重新打开场景时,地图中保存节点的顺序可能会错掉的问题
  • [ParticleSystem] 修复了当粒子进行多次加载的时候,会出现当需要获取粒子时资源已经被清除了的警告
  • [ParticleSystem] 修复了粒子组件,加载后不会自动加载粒子资源的.png文件的问题
  • [Toggle] 修复 Toggle 组件在调用 check 和 uncheck 函数时未发送 Component.EventHandler 的回调
  • [Graphics] 修复 native 上画曲线的时候有可能导致崩溃的问题
  • [Mask] 新增 Image_Stencil 模式,可以设置一个 SpriteFrame 来对子节点进行遮挡或剔除
  • [Animation] 修复了拖拽修改关键帧位置时鼠标锁死的问题
  • [Animation] 修复了动画编辑器选择 clip 的 select 下拉菜单出现位置错误
  • [Animation] 修复退出 Animation 编辑时会弹出两次确认框的问题
  • [Animation] 修复了修改动画资源后保存失败的问题
  • [Animation] 修复了父节点和子节点上都有动画组件和 clip 时,子节点无法正确显示 clip 选择下拉菜单的问题
  • [Animation] 修复了双击节点之间的蓝色连线时会报错并导致后续点击事件失效的问题
  • [RichText] 修复富文本使用自定义字体时,原生平台显示效果不正确的问题
  • [RichText] 增加描边支持,通过标签 <outline color=xxx width=xxx> 另外,outline 标签也支持 click 事件
  • [Label] 修复当排版模式设置为 SHRINK 时,用代码切换场景会导致卡死无法切换的问题
  • [Label] 修复了 BMFont 在启用场景延迟加载的时候报错的问题
  • [Label] 修复原生平台上 BMFont 在某些情况下导致不同的 Label 使用同样纹理的问题
  • [Label] 修复了系统字体 和 TTF 在 opacity 属性修改的时候会重新生成贴图的问题,提高性能
  • [Label] 修复了系统字体使用动态加载的方式去设置 ttf,会导致字体大小变化的问题
  • [EditBox] 修复了 landscape 模式下面输入的文字无法显示的问题
  • [EditBox] 修复初始字符在网页端无法显示的问题
  • [Spine] 修复了 Spine 数据验证失败时场景不能打开的问题
  • [Spine] 修复了使用 SGSkeleton.getBoundingBox 方法时出错的问题
  • [Spine] 修复升级 Spine runtime 后事件机制无法正常工作的问题
  • [Spine] 修复 Spine 组件在更换 skeletonData 属性之后注册的事件监听器会丢失的问题instantiate
2016年12月22日
V1.3.3 版本

在 1.4 版本的诸多新功能和优化跟大家见面之前,1.3.3 补丁版本也悄悄上线了,除了社区反馈的重大问题修复,我们还添加了两个新功能:

Mask 组件增加 Stencil 模式

mask-stencil

Mask 组件终于补完了使用任意贴图的 alpha 信息作为遮罩功能,只要模式选择 Stencil,就可以拖拽一个 SpriteFrame 资源到组件里,并使用该图像资源的 alpha 信息对组件所在节点的所有子节点进行遮挡或剔除。

要注意 Alpha Threshold 参数用于控制参与剔除的 alpha 阈值,当设置为 1 时不做任何剔除。另外还增加了一个通用属性 Inverted,可以用于反转遮罩的效果,该属性对于矩形和椭圆形的遮罩也同样适用!

自动图集配置增加剔除未被引用资源的开关

autoaltas-exclude-unref

根据部分开发者反馈,自动图集配置所在目录下并非所有贴图都会被使用,希望能够在构建时自动剔除未被引用的资源。

我们为自动图集配置资源增加了「不包含未被引用资源」的选项开关,默认关闭,当勾选后会在构建阶段对所有即将打包的图片资源进行引用检查,如果未被场景和 prefab 引用就不会被打包进自动图集中。

Cocos Creator_v1.3.3完整改动列表

  • [AutoAtlas] 自动合图配置文件里增加选项,支持剔除当前文件夹下没被引用过的图片
  • [Engine] 为 cc.sys.language 里增加土耳其、罗马尼亚、保加利亚、乌克兰的语言代码
  • [Engine] 修复 iOS 平台上编译时出现的声音模块错误问题
  • [Engine] 修复监听重力感应事件时的错误
  • [Builder] 修复 Keystore 面板创建的 keystore validity 无效的问题
  • [Builder] 修复了开发者对 AndroidManifest.xml 文件的修改在编译时可能丢失的问题
  • [ParticleSystem] 修复当 ParticleSystem 加载 textureUuid 为 undefined 时,会导致 ParticleSystem 重复加载死循环的问题
  • [Engine] 修复使用 mixins 导致原生平台运行脚本报错的问题
  • [RichText] 修复自定义字体为空时在 safari 上面创建出错的问题
  • [RichText] 修复富文本使用自定义字体时,原生平台显示效果不正确的问题
  • [Label] 修复 Resize Height 模式在编辑器里面修改 size 的时候不会触发 size-changed 事件的问题
  • [Label] 修复 .fnt 文件无法被场景预加载的问题
  • [EditBox] 修复原生平台上 EditBox 编辑完后,Label 显示位置不正确的问题
  • [Mask] 添加 Image Stencil 模式,可以指定一张贴图作为遮罩
  • [Spine] 修复原生平台上使用 spine 可能会导致崩溃的问题

Cocos Creator_v1.3.2改动列表

  • [RichText] 增加自定义 TTF 字体支持
  • [DragonBones] 修复了通过代码初始化 DragonBones 组件的 dragonAsset 属性会报错和崩溃的问题
  • [Engine] 修复了使用 renderTexture 截图后 viewport 和原来不一致的问题
  • [Label] 修复了 LabelOutline 和 RichText 下划线在 iOS 和 Android 平台颜色不正确的问题
  • [Loader] 修复了 cc.loader.loadRescc.loader.load 可能无法识别相同资源正确使用缓存的问题
  • [Loader] release 现在可以通过传入 url 释放没有 uuid 的贴图资源
  • [Engine] 对 iOS 上的微信版本进行判断,在 iOS 9 上使用 Canvas 渲染(由于微信 UIWebView 的 bug),在 iOS 10 上使用 WebGL 渲染
  • [Action] 修复了 rotateBy 旋转轴向参数在原生平台上不能分别控制两个轴向的旋转问题
  • [Prefab] 修复了 Prefab 的节点 Size 为 0 但是坐标大于 100 时,双击点击 Prefab 场景就无法正常显示的问题
  • [Builder] 构建原生项目时,如果 C++ 引擎版本发生变化,提示用户需要删除构建工程重新生成
  • [Builder] 加入构建进程保护机制,减少可能出现的进程卡死情况
  • [Builder] 构建时保存的目标路径现在支持相对路径
  • [Collider] 修复了CircleCollider 在 node 修改 anchor 后 boudingBox 计算错误的问题
  • [Editor] 修复了切换帐号登录时在主菜单上帐号信息显示异常的问题
  • [Animation] 改进 sample 方法,可以对某个特定的 animationState 进行操作,并且在 setCurrentTime 后会自动调用 sample 来更新动画状态
  • [Layout] Padding 边距现在可在不同方向分别定制
  • [PageView] 增加了新的页面排列模式,支持不规则页面大小

Cocos Creator_v1.3.1改动列表

  • [Editor] 修复了部分 Windows 10 电脑上启动 Creator 闪退的问题
  • [Editor] 修复出现 Compile error 报错消息时,解决了编译错误可能还是无法清除报错信息的问题
  • [Build] 构建 iOS 平台的项目增加 Xcode 8 支持
  • [Engine] `cc.loader.release` 现在会正确的删除缓存和自身资源内容(比如 texture, audio),同时支持释放一个资源数组。另外加入 `removeItem` 用于仅删除缓存和 `getDependsRecursively` 用于获取自身依赖资源列表(包含自身)。
  • [Engine] 修复原生平台 `setSiblingIndex` 接口可能无效的问题
  • [Engine] 修复了移动 Web 平台上强制横屏可能在初次进入或切换场景时失效的问题
  • [Engine] 修复了 isScheduled 在 Web 无效,一直返回 false 的问题
  • [Engine] 修复了 cc.loader.onProgress 没有在子队列更新的时候回调的问题
  • [Engine] 修复了安卓平台获取到的 acceleration 参数可能会和实际相反的问题
  • [Engine] 修复了原生平台 EventDispatcher 绑定错误可能导致的随机崩溃问题
  • [EditBox] 修复了在 macOS 10.12 Sierra 上 EditBox 无法正常输入的问题

上次v1.2版本大大提升了引擎性能,而这次Cocos Creator v1.3带来了多个大家呼吁已久的新功能,总会有一项是你期待已久的:

  • 富文本支持
  • Dragon Bones
  • 骨骼动画支持
  • Prefab 自动同步
  • 打包时自动合图
  • 新增 UI 控件:PageView,Toggle , Toggle Group,Slider
  • Creator for Lua 1.1 新升级,插件形式全自动工作流程
  • 全新 AudioEngine

cocoscreatorv1-3%e5%be%ae%e4%bf%a1

新增的功能里,不光有富文本、DragonBones 骨骼动画和无数新 UI 控件让你的游戏界面和角色动画具有更多的弹药和想象空间;Prefab 自动同步和自动合图功能全面提升了协作项目的工作效率,大大降低美术人员管理项目资源的成本;全新的音频引擎同时提升了稳定性和资源加载的效率;Lua 支持进一步补强,进入全图形化自动工作流时代,让 Creator 成为开发 Lua 游戏的最佳选择。

下面为大家详细介绍每个新功能的亮点,相信不会让你失望。

富文本支持 聊天姿势花样百出

64d906a6-f0ac-4d8c-ba44-b3c05b61b233

有了富文本,大伙终于可以在游戏里愉快的聊天啦!新增的富文本组件 RichText 能够根据字符串里 BBCode 标签,自动生成不同样式的文字,目前支持的标签包括 size, color, b, i, u, img 和 on,分别用来定制字体大小,字体颜色, 加粗,斜体,下划线,图片和点击事件。有了富文本的帮助,能够轻松的使用少量 UI 元素配合特定格式的数据传入来展示丰富的文本样式,可以非常容易的解决游戏内战斗信息播报或聊天频道的渲染需求。

Dragon Bones 骨骼动画支持 动画制作一气呵成

ab52d2bb-17ea-4c33-8fcd-bea78df58c52

响应广大用户的号召,我们在这个版本里加入了 Dragon Bones 这个非常流行的骨骼动画编辑工具的数据格式支持。DragonBones 组件的使用方式和 Spine 类似,只要新建组件后将 DragonBones 导出的动画数据和图集数据拖入到组件中即可马上开始使用,还可以通过组件定制如默认播放的动画、播放速度和循环次数等。

Prefab 自动同步 有效提升开发效率

Prefab 预制资源从设计之初就是希望能够让用户可以提高资源和场景元素的重复利用率,但之前的 Prefab 一旦在编辑器中被添加到场景里,就变成了静态的节点,无法自动同步 Prefab 资源的更新。这个拖欠已久的功能终于在 1.3 版本中补全了,现在在创建好 Prefab 资源后就可以选择是否需要场景中的 Prefab 实例同步资源文件的修改:

73d5a503-e7e0-4a4e-b1ca-530d08081e77

上图中表示的状态说明场景中的实例会自动同步。

181f5215-b99b-4a1c-988e-cc366818fa0b

下图中表示的状态是之前版本的默认行为,也就是该 Prefab 实例不会自动同步资源更新。 这个小功能的加入,将使静态搭建的场景更容易维护,比如一个主菜单场景由多个 UI 菜单组成,每个菜单都可以做成 Prefab 并由专人负责维护,这些人在各自修改 Prefab 并保存资源后,其他团队成员只要获取资源的变化,就会自动在场景中看到更新,而整个过程中场景数据都不需要做任何改动,大大提高了场景协作的流畅度!

新增 UI 控件:PageView,Toggle,Toggle Group,Slider

为了偿还另外一组拖欠的功能,我们一口气在这个版本加入了四个全新的 UI 控件 PageView,Toggle,Toggle Group,Slider。这些都是之前 Cocos Studio 就具有的控件,之后我们会进行 Cocos Studio 兼容性的测试,预计很快就可以支持这些从 Cocos Studio 导入带有这些控件的场景和工程。

46f05537-128d-4463-a201-db839e6643cf

随着富文本的加入和 UI 控件的补完,我们终于可以保证用户可以使用 Creator 实现任何所需的 UI 界面了,配合从 1.0 时期就非常强大的多分辨率自适应系统和功能高度集成的 Sprite 和 Label 基础渲染组件,Cocos Creator 将在重 UI 游戏的开发领域占有很大的优势。

Creator for Lua 1.1 新升级,插件形式即用即所得

在新版中,Creator for Lua 全面升级为插件形式,推出两大改进来提高开发效率和流畅度:

  • 首次以插!件!形!式!直接集成在 Creator 用户界面中。点点鼠标完成 Creator 场景到 Lua 代码的转换工作,就是这么简单有木有!
  • 提供自动构建功能。每次保存场景后,插件就会立即开始转换代码,妥妥的。

废话少说,我们来看看怎么安装使用这个神奇的插件。

安装插件

Creator for Lua 1.1 插件提供了 Windows 和 Mac 下的安装程序,执行安装程序瞬间完成安装。

然后,不好意思,没有然后了,已经装好了,ENJOY IT!

使用插件

启动 Creator,在场景里啪啪啪放一堆内容,然后选择菜单“工程 -> Lua Support -> Setup Target Project”,就可以看到目标工程设置对话框。

0ee263a1-638b-4a65-b2f8-6fb157e323b9

在这个对话框中我们只需要做三个步骤:

点击 Project Path 旁边的 “…” 按钮选择你的 Lua 工程目录; 点击 Copy Support Library 按钮(这个步骤只需要对每一个新 Lua 工程做一次); 点击 Build 按钮。 如果你还没创建 Lua 工程,可以参考下面的命令行:

$ cocos new -l lua mygame

构建出 Lua 代码后,我们就可以愉快的在 Lua 中显示 Creator 创建的场景了。

自动构建

默认情况下,并没有启用自动构建功能。所以修改场景后要更新 Lua 代码,需要重新点击 Build 按钮,或者选择菜单“工程 -> Lua Support -> Build Now”。

更省事儿的做法是在对话框中选中 “Auto Build” 选项。这样每次保存场景,就会自动更新 Lua 代码啦。

Creator for Lua 1.1 下载:

http://cocos2d-x.org/filedown/Creator-Lua-Support-1.1.3-win

http://cocos2d-x.org/filedown/Creator-Lua-Support-1.1.3-mac

AudioEngine全新升级 贴心细节让你用得更省心

在Cocos Creator v1.3 里,重构后的 New AudioEngine 仍然叫做 cc.audioEngine,但内部实现上已经脱胎换骨,解决了以下问题: 优化了预加载过程,加载完成后就可以立刻开始播放 增加了获取音频时长,获取当前播放位置等接口 增加音频播放完毕后的回调方法 优化了 Web 平台上音频播放的方式,大尺寸的音频会自动切换到 Audio 模块进行加载,节省内存开销

重构之后的音频引擎现在不再区分 Music 和 Effect 两种音频,而是都可以使用统一的接口播放。

其他重要改动

  • 增加命令行构建和打包工程,为持续集成测试铺平道路
  • 增加了指定跨项目共享资源库的功能
  • 优化内存管理模型,统一 JSB 绑定接口(cocos2d-x 3.13)
  • 优化资源缓存和加载机制
  • 重构 cc.Loader,支持每次 Load 独立的队列和更好的进度信息,解决了资源循环依赖时重复加载的问题和有几率出现同步回调的问题
  • 升级 spine runtime 库,支持 3.x 版本的 spine,修复了图像混合模式显示问题,支持 triangle 渲染命令

重要升级说明

由于图像处理库升级需要,Windows 版开始使用 64 位架构,不再支持 32 位的 windows 系统。带来的好处是编辑器内处理大量图片资源时的效率提升了至少5倍,而且能够支持新兴的图片格式 Webp。 Android 构建时将会列出本地已经安装的 API Level (在 android-sdk/platforms 里,通常以 android-10 这样的子目录形式出现),并可以由开发者自主选择编译时使用的 API Level,不再强制使用某一特定版本的 API Level。 Creator 的手册文档已经开源,英文文档比起中文版还欠缺很多内容,欢迎大家一起进行勘误、补完、翻译

地址:https://github.com/cocos-creator/creator-docs

完整改动列表

编辑器

  • [Installer] Windows 安装包里增加了自动安装 Visual Studio 2015 的安装选项
  • [Build] Android 平台增加 API Level 选择菜单,根据用户指定的 SDK 目录下的 platforms 中的内容列出可选的 API Level,并且在构建时自动修改相关的设置
  • [Build] 增加使用命令行构建项目的功能
  • [Build] 为 binary 模板添加 Android Studio 支持
  • [Build] 修复了构建面板中设置的屏幕朝向在 Web 平台第一次启动时不生效的问题
  • [Build] 选择 android 平台时的 keystore 密码现在会用密码格式显示
  • [Build] 修复了在 Mac 系统当项目资源很多时,构建可能会报错 too many open files 的问题
  • [Build] 修复了脚本放在 resources 目录下时,构建会报错的问题
  • [Build] 修复了构建出的 Android Studio 项目生成的 application 名称错误问题
  • [Build] 当引擎路径中有空格时,构建时会给出正确的错误信息
  • [Package] 修复了无法正确 watch 用户插件的改动问题,现在可以在编辑器打开的状态下随意修改用户插件并立刻获得刷新
  • [Assets] 优化了图集中的 SpriteFrame 资源缩略图标的渲染逻辑,解决了部分资源较多项目打开过程中可能卡死的问题
  • [Assets] 增加自动打包图集功能,需要在存放碎图的文件夹新建一个 自动图集配置 资源,之后就会在构建阶段将碎图自动生成合图进入打包。
  • [Assets] 为图集中的 SpriteFrame 资源增加了缩略图标显示
  • [Assets] 修复了导入大量资源时,有可能重复触发 compile 操作的问题
  • [Assets] 资源管理器搜索栏增加搜索 uuid 的功能,输入u: xxxxx 即可通过 uuid 进行搜索
  • [Assets] 在资源管理器里的资源右键菜单中增加「查找使用」功能,可以过滤出所有引用该资源的其他资源(包括场景和 prefab)
  • [Assets] 在导入 custom asset 出错时,提供更明确的提示信息
  • [Properties] 修复了 tooltip 在 array 和 object 属性上不显示的问题
  • [Properties] 修复了 reset node 操作无效的问题
  • [Properties] 修复了属性类型和已绑定数据不符时,不会正确显示报错信息和 reset 按钮的问题
  • [Console] 在 clear error 的时候现在不会清除编译失败的报错条目
  • [Editor] 修复了使用撤销命令还原一个值为 null 的属性时不会触发场景变化的问题
  • [Editor] 修复了 Undo 对象删除操作耗时比较高时,updateAnimatingInEditMode 会报错的问题
  • [Editor] 修复了项目设置面板里设置的初始运行场景,在使用模拟器运行时不会生效的问题
  • [Editor] 修复了 windows 平台经常会遇到 undo/redo 操作失灵的问题
  • [Editor] 第三方脚本导入为插件后,如果其中含有 ES6 语法,发布时添加报错提示
  • [Editor] 增加了命令行参数 --mount 来指定外部资源路径。(可以通过多个 --mount 参数来 mount 多个路径,参数值可以为绝对路径或者相对于工程的相对路径)增加命令行参数 --writable 来指定是否可以修改保存外部资源路径里的文件。
  • [Editor] 使用全新的图形处理库,解决了导入过大图片(8192x8192)时会报错的问题,并且提高了图像处理速度
  • [Editor] 修复了当项目中所有图片都进入自动图集时会导致构建失败的问题
  • [Editor] 修复了 Sliced Sprite 在编辑器切分时无法在场景中预览最新效果的问题
  • [Editor] 修复了按 Cmd/Ctrl + Q 关闭窗口时会引起报错的问题
  • [Editor] 在脚本资源勾选了 导入为插件 的情况下增加是否在原生或 Web 平台生效的选项
  • [Scene] 修复了保存场景会导致层级管理器里节点折叠状态重置的问题
  • [Scene] 修复了在场景中持续预览粒子一段时间后,再平移场景视图会严重卡顿的问题
  • [Prefab] 修复了自动同步 Prefab 的各种显示问题
  • [Prefab] 修复自动同步的 prefab 进行嵌套后,会导致场景无法打开的问题
  • [Dashboard] 修复了选择 打开其他项目 后取消,出现的项目不合法报错提示
  • [Node Tree] 修复了新建节点时,无法正确显示节点的高亮选中状态问题
  • [Node Library] 为控件库补完了 1.2 以来新增的控件类型

引擎

  • [Engine] 在所有平台限制 downloader 最大并发数,避免同时加载过多资源时的报错
  • [Engine] 修复了 grayscale shader 无法使用的问题
  • [Engine] 移除了用 loadRes 加载 json 资源时 No need to release non-cached asset 的警告
  • [Engine] 修复了构建到 Web 平台合并资源 json 后仍然有可能出现多次请求的问题
  • [Engine] systemEvent 现在会继承 EventTarget,并支持用 cc.systemEvent.on / once / off 来注册或取消注册系统事件,之前需要用 eventListener 来监听的键盘和重力感应事件现在可以统一用 on off 注册和取消了。
  • [Engine] 重构 cc.Loader,支持每次 Load 独立的队列和更好的进度信息,解决了资源循环依赖时重复加载的问题和有几率出现同步回调的问题
  • [Engine] 提供 Loader 每个加载任务独立的 context,解决运行时合并后的 JSON 对象没办法自动释放的问题
  • [Engine] 修复了微信桌面客户端里运行游戏时无法响应点击事件的问题
  • [Engine] 加入触摸点超时设置,用于解决微信 x5 内核上手指移出屏幕时不能正确触发 touchcancel 事件造成后续无法交互的问题,如果需要保留长时间静止的触摸点,需要手动修改超时的时长设置 TOUCH_TIMEOUT
  • [JSB] 重构了 JS-binding 的接口,提升了稳定性,绑定 API 现在和 cocos2d-x 3.13 保持一致
  • [Audio] 升级声音引擎到 New AudioEngine,解决了之前一些声音播放的兼容性问题
  • [Audio] 由 Loader 管理 Audio 的内存,让 loader 可以完全释放 Audio 资源
  • [Audio] 修复了 AudioSource 组件在切换场景后还会继续播放的问题
  • [Action] 修复了 cc.flipX 在原生平台会引起崩溃的问题

组件和模块

  • [DB] 添加 dragonBones 组件,支持 DragonBones 格式的骨骼动画
  • [Component] 增加 Slider 滑动条控件
  • [Component] 增加 Toggle 和 ToggleGroup 控件
  • [RichText] 增加了富文本组件的支持,使用 bbcode 格式的标签写法,目前支持颜色,字号,加粗,斜体和点击事件
  • [PageView] 新增翻页容器组件
  • [TiledMap] 增加了 ObjectGroup 显示的支持
  • [TiledMap] 修复了删除 Tiledmap 节点后再 undo 无法显示的问题
  • [TiledMap] 修复当 tmx 文件中使用了 tsx 文件时,可能会遇到显示错乱的问题
  • [TiledMap] 修复了当使用不同的地图资源重复初始化同一个 TiledMap 组件时会遇到的报错问题
  • [TiledMap] 修复了原生引擎中移动地图可能会出现接缝的问题
  • [TiledMap] 修复了 TiledLayer 的 setTileGID 接口在传入参数不足时可能产生错误的问题
  • [TiledMap] 修复通过 cc.TiledLayer.getTileAt() 获取的 tile 节点,调用 setVisible(false) 在 canvas 渲染模式下无效的问题。
  • [Spine] 在 Skeleton 组件上增加了 premultipliedAlpha 处理预乘图像,当图片的透明区域出现色块时需要关闭该选项,当图片的半透明区域颜色变黑时需要启用该选项
  • [Spine] 升级 spine runtime 库,支持 3.x 版本的 spine,修复了图像混合模式显示问题,支持 triangle 渲染命令
  • [Button] 新增 Scale Transition,添加重置 button size 到 target 节点尺寸的按钮
  • [Button] 当 button 的 interactable 设为 false 时,如果没有设置相应的 disable 状态,会自动将 normal 状态的贴图变灰显示
  • [ScrollView] 将桌面平台的鼠标滚轮操作修改为更符合 Windows 操作系统习惯的滚动方式
  • [Graphics] 修复了当用户添加 graphics 组件时,会重置自身节点的 Size 为 0 的问题
  • [Graphics] 修复了未定义属性的 get/set 警告
  • [Graphics] 修复了在 canvas 下需要调用两次 clear 才能清除掉绘制的内容的问题
  • [Animation] 修复了动画事件回调中调用 play 无效的问题
  • [Animation] 修复了从指定帧开始播放动画,前面的帧事件还会被回调的问题
  • [Collider] 修复了在 onCollisionEnter 中修改 node 的 group 无法正确更新的问题
  • [Collider] 修复了在节点上新增一个 Circle Collider 组件就会一直报错的问题
  • [Widget] 修复了 CCWidgetManager 在 Scrollview 大小改变时出现 _widget 报错问题
  • [Widget] 修复了属性检查器中的 topbottom 复选框消失的问题
  • [EditBox] 修复通过 prefab 方式实例化后直接设置 placeholder 报错问题
  • [EditBox] 新增 setFocus,stayOnTop 属性,当 stayOnTop 为 true 则,可以通过设置 tabIndex 来控件 Tab 键的 focus 行为。在微信的 iframe 里使用 EditBox 时,需要把 stayOnTop 属性设置为 true
  • [EditBox] 修改了 maxLength 属性的行为,当设置为 0 时禁止用户输入,当设置为 -1 时不限制最大输入字符长度
  • [Label] 修复了模式为 Resize Height 的 Label 文字内容设为空后再添加内容换行也不会生效的问题
  • [Label] 修复了在 Node 非激活状态下添加 Label 组件,导致 debounce 函数 warning 报错的问题
  • [Label] 修复了 LabelOutline 组件在适配 TTF 字体时颜色错误的问题
  • [VideoPlayer] 添加 META_LOADEDCLICKEDREADY_TO_PLAY 事件。现在 toggle visible 会暂停视频播放,并且在视频控件不可见的情况下面不能播放视频。同时,统一 web 和 jsb 的 video 的表现。
  • [Component] 新增一个生命周期回调 resetInEditor,这个方法只在第一次添加组件时调用(如果是场景重新载入,这个方法不会被调用)。另外这个方法也会在点击组件菜单的 reset 后调用。
  • [Component] 为 cc.Component.EventHandler 添加传参,目前只允许传入一个 string 参数
2016年09月22日
V1.2.2 版本

1.2.2 是 1.3 版本更新之前最后一个 patch 发布,主要改动有:

- Prefab 增加了自动同步场景中的实例的功能,默认创建的 Prefab 采用手动同步方式,需要修改为自动同步才能使用新功能

- 通过 `cc.view.enableAntiAlias(false)` 接口,提供针对像素风图像禁用图像线性平滑的方案

- 大大改善了 Web 发布版本页面初始化的时间,微信打开时的白屏时间大大减少了

- 大量节点事件系统方面的问题修复

引擎

- [Engine] 增加了 `cc.view.enableAntiAlias(false)` 接口,可以禁用线性采样,显示锐利的像素边缘

- [Engine] 增加了 `cc.view.enableAntiAlias(false)` 接口在原生平台的支持

- [Engine] 修复了部分竖屏较宽的移动设备上浏览器中弹出软键盘时,屏幕朝向会变化的问题

- [Engine] 修复了在 start 函数中给一个 active 为 false 的节点添加事件,事件在 web 端表现正常不响应,但在 native 端,依然会响应的问题

- [Engine] 改善了 Web 平台发布页面的结构,大幅提高页面初始化速度(减少白屏时间)

- [Engine] 修复在节点激活之前注册事件,激活后不会生效的问题

- [Engine] 修复了 Web 平台在切换浏览器 tab 或浏览器激活状态后部分节点已注册事件失效的问题

- [Engine] 修复了加载较大 TTF 资源时可能无法正确获得加载完成状态的问题

- [Engine] 修复了移动浏览器上使用 deprecated 接口会直接报错的问题

- [Action] 修复了 tintTo 和 tintBy 在原生平台工作不正常的问题

- [Action] 修复了使用 cc.targetedAction 时的报错问题

编辑器

- [Animation] 修复了动画编辑器指针线会出现断开的情况

- [Animation] 修复了动画编辑中拖拽节点的时候,position 有可能会被重置为拖拽前数据的问题

- [Animation] 修复了 Undo 对象删除操作耗时比较高时,updateAnimatingInEditMode 会报错的问题

- [Console] 增加了 ignore case 开关来决定过滤日志时是否匹配大小写。

- [SDK] 修复了构建 Web 平台时插入的 AnySDK 运行库地址错误的问题

- [Prefab] 为 Prefab 增加了自动更新场景中实例的功能,现在可以手动选择 Prefab 是否需要自动刷新

组件

- [Label+Widget] 修复了 Label 的 Overflow 设为 Shrink,string 为空,Widget 只对齐一边时,在原生平台上会卡死的问题

- [Particle] 修复了没有设置 texture 属性时在原生平台运行会崩溃的问题

- [Tilemap] 修复了 Tiledmap 删除后再 undo 无法显示的问题

- [Graphics] 修复了在大小写敏感的操作系统中会产生模块无法找到的报错问题

- [EditBox] 修复了在 mac 平台下面 resize 的效果不对的问题

- [Button] 没有指定 hover sprite 时,现在会去掉 mouse over 事件的注册

- [ScrollView] 修复编辑器里面保存场景时,ScrollView 的 content 的位置会随机跳动的问题

- [ScrollView] 修复了 Scrollview 组件被禁用时还能够响应 touch 事件的问题

- [ScrollView] 添加了 TOUCH_UP 事件回调

2016年08月29日
V1.2.1 版本

Cocos Creator 是以内容创作为核心的游戏开发工具,在 Cocos2d-x 基础上实现了彻底脚本化、组件化和数据驱动等特点。

当前最新版本:v1.2.1

更新时间:2016年08月29日

更新日志:

产品介绍:

根据开发者的反馈和建议,我们在这个新版本里加大了对 AnySDK H5 平台的支持,让游戏发布更为便捷顺畅;进一步优化了场景切换时的资源内存管理,可有效降低内存占用 20%~50%;同时修复了多项bug,进一步优化了用户体验,相信你一定会在这个新版里找到不少惊喜。
 

Windows版安装特别说明
 

如果 Windows 安装版无法完成安装,或出现注册表问题,请下载绿色版使用,下载地址  

增加 AnySDK H5 平台运行库支持
 



在「构建发布」界面的移动端 Web 平台上,我们添加了一个 AnySDK 的选项,勾选后即可在构建出的 index.html 页面中插入 AnySDK H5 平台的运行库链接代码。该代码会自动获取云端最新的 AnySDK 运行库插入到页面中,这样就可以实现同样一套接入代码,自动生成原生和 H5 的渠道包了,平均每个渠道接入只需 5 分钟!
 

自动释放场景资源,内存占用可下降20%~50%


在资源管理器里选中场景资源后,可以发现增加了「自动释放资源」的选项,勾选之后在切换场景时会自动对新旧场景的资源引用进行对比,然后释放掉旧场景中不需要的资源,再加载新场景中新增的资源。对于频繁切换场景的重关卡内容的游戏可有效降低内存占用 20%~50%。
 

Widget 控件新增了基于中心对齐时的距离设置
 


 

这个版本里,我们响应很多开发者朋友的要求,为 Widget 组件的居中对齐选项也增加了距离设置,现在在勾选水平中心对齐或垂直中心对齐后,就可以在显示出的距离设置对话框中输入像素数值或百分比数值来规定子元素距离父元素中心的距离了,输入负数即可指定子元素在父元素中心点偏左。


编辑器

  • [Assets] 修复了 Assets 面板显示搜索结果时,重命名文件会报错的问题
  • [Preview] 修复了浏览器预览时使用 console.log(node) 时会出现大量报错信息的问题
  • [Preview] 修复了在浏览器预览场景时,如果进入 prefab 编辑模式并点击保存,浏览器里会报错的问题
  • [Editor] 修复保存场景后马上切换场景,可能会覆盖另一个场景的问题
  • [Dashboard] 修复了 windows 上不能将项目新建在根目录的问题
  • [Build] 修复了构建时引擎模块化剪裁可能失效的问题
  • [Build] 修复了打开构建面板后,删除场景,构建后游戏会黑屏的问题
  • [Preference] 在「数据编辑」分页里添加取消自动编译项目脚本的功能,关闭后必须按 F7 才会编译
  • [Code-Editor] 修复了内置代码编辑器中 tab 键不起作用的问题
  • [Console] 修复了点击状态栏里的报错信息,不能正确跳转到控制台的问题


引擎

  • [Engine] 修复了部分 UI 组件可能引起内存泄露的问题
  • [Engine] 修复了在移动设备上无法强制横屏的问题
  • [Engine] 修复了 Mouse hover 事件在场景切换后没有正确清除的问题
  • [Engine] 修复了设置导入为插件的脚本中,定义全局变量会报错的问题
  • [Engine] 修复了Web 平台和 Native 平台 skew 计算结果不统一的问题
  • [Render] 修复了一个导致 Bmfont 无法正确被批量渲染的问题
  • [Graphics] 修复了 arc 绘制时设置 counterclockwise 方向不对的问题
  • [Graphics] 修复了在 Windows 平台使用部分接口会造成崩溃的问题
  • [Action] 修复了使用 ScaleBy, SkewBy 动作时会出现 'too much recursion' 的提示
  • [JSB] socket.io 的 send 方法现在在原生平台也可以传入对象类型的参数了
  • [JSB] 现在原生平台下的 runAction 也会返回动作实例了


组件

  • [Component] 修复了组件上属性很多时可能出现属性引用获取失败,全部显示为None的问题
  • [Component] 修复了颜色拾取器不能正确保存颜色的问题
  • [Button] 修复了 Transition 为 color 的时候,修改 interactable = false 表现不正确
  • [Mask] 修复了先添加事件后加入节点树,导致 Mask 在事件处理中不生效的问题
  • [Animation] 修复了动画里添加 Collider.size 的属性和关键帧时,size 的值会被强制设为0的问题
  • [Animation] 修复了在另一个组件的 onEnable 中设置了动画节点的 active 为 false 时,动画不会停止播放的问题
  • [Animation] 修复了动画编辑状态下编译脚本后,场景中移动轨迹会消失掉的问题
  • [ScrollView] 修复了滚动到最下方并移除最后一个列表元素时,scrollBar 没有正确更新的问题
  • [ScrollView] 只有在绑定了 content 节点时才进行事件注册
  • [ScrollView] 添加了 cancelInnerEvents 属性,用来控制是否阻断 ScrollView 上面的 item 的 touch move 和 touch end 事件
  • [ScrollView] 修复 ScrollBar 在切换 Scrollview 节点的激活状态时会消失的问题
  • [ScrollView] 修复了在 iOS 平台上上边部分可能会有一段空白区域的问题
  • [Label] 修复了 WebGL 渲染模式下 Label 背后有锯齿严重的底图,而且无法修改透明度的问题
  • [Label] 修复了 LabelOutline 会导致 shrink overflow 算法卡死编辑器的问题
  • [Label] 修复场景中加载多个 TTF 时,Label 可能会使用错误的 TTF 字体的问题
  • [Label] 在编辑器非激活状态下增加 BitmapFont 资源,打开项目时会造成编辑器卡死的问题
  • [VideoPlayer] 添加了 currentTime,duration 和 isPlaying 接口,用于获取当前播放进度,总时间和是否正在播放的状态
  • [Widget] 修复了 Widget 运行预览后会自动在编辑器中关闭的问题
  • [SpriteDistortion] 修复了球状渲染组件在 1.2 重构 WebGL 渲染后失效的问题
  • [EditBox] 修复了 input type为 Number 时,maxLength 无效的问题
2016年08月08日
V1.2.0 版本

通过之前的 1.0 和 1.1 两个大版本我们补全了基本的工作流程和工具链,开发者已经具备了开发绝大部分游戏类型的可能。而在炎炎夏日中我们推出的 1.2 版本,则专注于 Web 引擎性能的提升,前几个月开始使用 Creator 开发游戏的朋友们现在在产品上线前可以获得一次免费的性能提升啦!

1. 版本亮点:

1.1HTML5

在Cocos Creator v1.2的版本中,我们投入了大量精力对HTML5性能进行优化。在无runtime的HTML5裸跑环境中,新版本Creator v1.2相比两个月前的v1.1:

  • WebGL性能提升5~10倍,主要得益于增加了WebGL上的自动批量渲染和自动剪裁功能
  • Canvas性能提升2倍,得益于该版本中增加的脏矩形功能
  • Web发布模式下,通过模块配置功能,使得引擎发布的体积缩小30%

2.Native

对于Native用户,我们在v1.2版本里终于完成了呼声最高的两个功能:

  • Lua支持,Lua支持,Luuuuuuuuuua支持!
  • AnySDK打包流程的支持。

3.通用

另外还有一些我认为比较突出的功能有:

  • 新增 cc.Graphics 图形绘制模块,跨HTML5和Native通用
  • 新增 WebView 控件
  • 增加了动画播放的回调事件,包括play, stop, pause, resume, lastframe,finished等
  • 对 Android 平台的渲染进行了优化,针对部分机型提升了性能

下面我给大家逐项介绍。

1.1 HTML5裸跑性能优化

WebGL

在 Cocos2d-x 3.11 和 3.12 两个版本里进行的 WebGL 批量渲染优化,目前在 Cocos Creator v1.2 版本里已经基本完成了整合,在包含了大量动态精灵图的 Bunnymark 项目中,Creator v1.2 相对 v1.1 版本的 WebGL 渲染性能提升了5倍。此外重构后的 Web 渲染模块还包括针对视窗进行自动剪裁,屏幕外面的精灵和文字现在不会再消耗渲染性能了,还能够支持任意尺寸的巨大 Tilemap 瓦片图等。

Canvas

除了WebGL,我们也在 Canvas 上增加了脏矩形算法的渲染优化,这能在静态场景带来2倍以上的性能提升,v1.2 新版本中对 Canvas 渲染模式默认开启脏矩形优化,如果您的场景包括很多动态内容,也可以通过 API 将脏矩形优化关闭。

对于脏矩形优化,我们用触控科技独家代理的顽石科技《二战风云H5》作为优化案例,可以看到在不同场景里,性能都得到了提升。

像下图这样堆砌了大量UI元素,又没有太多动画的世界场景,应用脏矩形后获得了最明显的帧率提升。

关于脏矩形优化的更多细节,请参考文档Creator脏矩形优化文档。要注意在Creator 1.2中,脏矩形默认处于开启状态。

1.2 Lua 支持预览版

对于社区里呼声最高的Lua支持,经过Quick-x作者廖宇雷和Creator开发团队两个月的努力,我们终于在这个版本里实现了!Lua 开发者现在可以使用 Cocos Creator 来搭建场景和 UI ,并在 Lua 游戏中调用、加载、正常显示和操作。

目前已完成的工作流程包括:

  • 在 Creator 中编辑静态场景(包括节点树和大部分内置控件)和项目资源
  • 构建发布成 Lua 输出格式
  • 通过官方转换工具将场景和资源输出成 lua 文件
  • 使用 cocos2d-x Lua 引擎的标准工作流程完成后续脚本编写和编译运行
当前版本支持的功能:
  • Sprite - 精灵:图像显示
  • Canvas - 画布:主要用于自动布局
  • Widget - 部件:可以配合 Canvas 设置自动布局和各种对齐方式
  • Button - 按钮:响应玩家操作
  • EditBox - 编辑框:用于玩家输入文字
  • ParticleSystem - 粒子系统:显示粒子效果
  • TileMap - 地图:显示使用 Tiled 编辑的地图
  • Animation - 动画:仅支持帧动画
  • Label (System Font) - 文字标签:仅支持系统字体
  • Component with Lifetime events - 组件及其生命周期管理

Cocos Creator的Lua插件下载地址:http://cocos2d-x.org/filedown/CocosCreator-Lua-v1.0

更多Lua支持的细节,请阅读Creator的Lua支持文档1.3 Graphics 图形绘制模块,支持SVG格式

从 0.7 版到 1.1 版,深受大家喜爱的 DrawNode 图形绘制接口始终处于缺席状态,在 v1.2 版本中我们终于迎来了图形绘制 API 的威!力!加!强!版! cc.Graphics。这个新的图形绘制接口除了能够完爆 DrawNode 的原有功能之外,还能直接兼容通用的 SVG 数据格式,互联网上数以万计的 SVG 矢量图像现在都可以直接在 Creator 制作的游戏中绘制出来,程序绘图爱好者赶快来尝试吧!

更多细节,请参考cc.Graphics组件参考文档

1.4 可自定义扩展的属性检查器 打开 v1.2 后最醒目的变化就是属性检查器了,为了方便开发者在开发组件时能够更灵活的定制属性控件,我们重构了整个属性检查器,除了外观上的变化,现在的属性检查器性能更高,还解决了之前版本很多人反馈的属性不能全选、拖拽时会失灵等遗留问题。现在开发者可以轻松做出像 Widget 组件那样的自定义输入控件,让你的组件更方便易用。 1.5 引擎模块化可配置,打包体积缩小30% v1.2 版本在「项目设置」面板中增加了新的分页「引擎模块」,在这个面板里您可以选择构建时哪些引擎组件会被打包,目前已经可以有效的减小打包版本中的 JavaScript 引擎 1/3 以上的体积,后续我们还会继续对核心模块进行细分和裁剪,将包体减肥进行到底。

1.6 AnySDK 内置支持 v1.2 版本构建出的原生工程将自带 AnySDK 的运行库,无需任何额外的环境配置就可以在项目中调用 AnySDK 接口并生成母包,然后在 AnySDK 软件中进行配置就可以轻松接入多渠道 SDK 了!

在下一个版本中我们将把AnySDK彻底内置到 Creator 内,以插件形式支持在 Creator 中通过图形界面直接完成 AnySDK 的配置并直接生成渠道包。

更多细节,请参考AnySDK内置支持文档

2. 完整改动列表

下面是Cocos Creator v1.2 的完整版改动列表,如果你关心自己提的新功能需求是否实现,或者BUG是否已经修复,可以在这份列表里找到答案。引擎团队一直很用心在处理社区用户的需求,有一些虽然不在版本亮点,但是仍然意义重大的功能,比如新增了WebView组件、新增了动画回调事件、新增了导出到Android Studio的选项等,都在开发中非常实用。

重大改动
  • [Build] 构建发布面板增加 Lua 引擎导出选项
  • [Engine] WebGL 渲染时加入自动批量渲染功能,通过妥善的组织合图和图片之间的渲染次序可以大幅提高性能
  • [Engine] 加入自动视窗裁剪(auto viewport culling)功能,基于 cc.visibleRect 对屏幕外的 Sprite 和 Label 节点进行剪裁
  • [Engine] 对 Web Canvas 渲染模式默认加入了脏矩形优化,大幅提升静态页面的渲染性能,并可以通过 API 关闭这个优化
  • [Engine] 原生引擎中加入 AnySDK 支持
  • [Editor] 在场景资源的属性检查器面板上添加了「延迟加载」选项,勾选后加载场景时只要完成了脚本和节点树的加载就会立刻运行,剩余的图片、plist 资源会在加载完成后自动显示
  • [Engine] 增加 cc.Graphics 图形绘制模块
  • [Preview] 在移动设备上运行预览时,可以点击浮动的齿轮按钮来呼出日志和调试界面
  • [Webview] 添加了 webview 组件,具体使用方法请参考范例

编辑器

  • [Editor] 在项目设置面板中加入了「模块设置」分页,可以通过复选来决定构建时引擎打包时包含的模块,减小不必要的包体
  • [Editor] 属性检查器已经使用新的架构重写,外观有了一定变化,另外修复之前在使用时的一些体验问题(比如点击时不能全选较长的数字)
  • [Assets] 修复资源管理器中名字带有 .. 的文件夹显示错误
  • [Assets] 修复了更新 Atlas 数据时,atlas 贴图下面的 spriteFrame 可能会显示更新之前的内容的问题
  • [Prefab] 修复了从 prefab 编辑状态退回到包含 Editbox 的场景时的报错问题
  • [Prefab] 修复了将控件库里的控件拖拽到 Prefab 节点下时会强制将 Prefab 转化为普通节点的问题
  • [Animation] 修复在编辑器中删除 AnimationClip 后,属性检查器里没有正确显示出 missing 状态,而且动画编辑器还可以继续编辑刚删除掉的 clip 的问题
  • [Animation] 修复了编辑带有 alignOnce 属性的 Widget 动画时预览无法正确生效的问题
  • [Animation] 添加了动画回调事件,包括 play, stop, pause, resume, lastframe,finished
  • [Animation] 修复了 disable Animation 组件后,如果勾选了 play on load,动画还是会被播放的问题
  • [Menu] Edit 里的全选操作现在可以正确选中层级管理器和资源管理器中的所有文件
  • [Scene] 修复了场景中反复开关 Particle 以后编辑器帧率卡顿的问题
  • [Scene] 修复了切换场景中节点的激活状态后 undo,导致节点树中显示的状态和属性检查器中显示状态不同步的问题
  • [Console] 重构了控制台消息架构,目前可以支持的消息数量没有上限
  • [Console] 修复了控制台在 windows 下不能正确显示中文日志的问题

引擎

  • [Engine] 对 Android 平台的渲染进行了优化,针对部分机型提升了性能
  • [Engine] 修复了改变节点父子关系时,子节点渲染时未能正确刷新继承自父节点的透明度问题
  • [Engine] 修复了同时加载多份Prefab资源的时候,如果有依赖的话,其中随机一个依赖项无法被加载
  • [Render] 改善了 WebGL 模式下动态字体的显示精度
  • [Render] 修复了在最新 Chrome 浏览器上渲染动画时可能会出现的不定期显示回溯的问题
  • [Render] iOS 平台图片解析现在使用 libPNG 库,解决半透明图片显示效果发黑的问题
  • [JSB] 修复了执行 bezierTo 动作时节点的坐标未更新的问题
  • [JSB] 修复了 scheduleOnce 会重复执行的问题
  • [JSB] 修复了 cc.game.EVENT_SHOW 和 cc.game.EVENT_HIDE 在 JSB 中无效的问题
  • [Action] 修复 Web 平台下 cc.hide、cc.show、cc.toggleVisibility 无法使用的问题

组件

  • [TiledMap] 优化了 WebGL 平台的 tilemap 的实现,取消了单个 tilemap 的渲染顶点数限制,目前原生平台下 tilemap 还是会有同屏顶点数的限制
  • [TiledMap] 修复了在编辑器中移动地图资源文件会导致地图不可用的问题
  • [TiledMap] 修复了 TiledLayer 的 setTileGID 接口在 web 平台不支持非整型坐标输入的问题
  • [TiledMap] 修复原生引擎对六边形的地图渲染效果错误的问题
  • [TiledMap] 修复 TiledLayer 无法动态设置透明度的问题
  • [Button] 修复在 onTouchEnd 事件里设置其 node.active=false 后,下次再显示时其显示图片没有恢复到 normal 状态的问题
  • [Label] 修复了原生平台动态设置 TTF 字体报错的问题
  • [ScrollView] Scrollview的 content size 小于 scrollview size 时,自动隐藏 scrollbar 并重置 content 位置
  • [ScrollView] 添加 stopAutoScroll 接口,用于手动中止惯性滚动
  • [ScrollView] 修复了 Touch startPoint 位置没有经过坐标系转换导致 ScrollView 中的点击事件失灵的问题
  • [Collider] 现在可以正确监听 node.group 运行时的动态改动
  • [EditBox] 修复 Android 平台上 EditBox 启动的时候会触发 TextChanged 事件的问题
  • [EditBox] 修复原生平台上 EditBox 中的 label 的行为和对齐方式与 web 平台不同的问题
  • [EditBox] 在 Web 平台上支持更多种类的键盘类型
  • [EditBox] 修复了 iOS 上第三方输入法会挡住输入框的问题
  • [EditBox] 添加 editingReturn 事件,用以区分是点击 enter key 还是点击了屏幕
  • [Component] 修复了复制粘贴 Component 时,如果有依赖的组件,则依赖的组件会在原组件之后添加的问题
  • [Component] 对属性检查器里 add component 菜单里列出的用户组件进行字母表排序

其他

  • [Build] 构建时为丢失资源增加了详细的引用文件和路径显示,而且现在不会导致构建失败了
  • [Build] 新增消息 editor:build-start,会在构建开始时发出
  • [Build] 移除构建到原生平台时合并 JSON 的功能,避免加载逻辑出错
  • [Build] 发布到安卓平台时加入了 Android Studio 复选框,仅对 default 模板有效,需要具有 Android SDK 22 才可以正确编译。
  • [Build] 修复了 Creator 程序名称中包含空格会导致编译模板类型为“binary”模式报错的问题

3. 关注Cocos社区

你可以在这些地方找到我们:

  • 论坛技术支持:http://forum.cocos.com
  • 每周教学直播:http://www.douyu.com/726225
  • 文档和视频教程:http://www.cocos.com/docs/creator/
  • 开源仓库和大量开源示例:https://github.com/cocos-creator
  • 微信公众号:搜索公众号名称「CocosEngine」