预告下 1.7 中的 RawAsset 代码升级计划

场景和资源由于一直使用 uuid 进行保存,不需要升级。
代码的升级会给出 3 个版本的缓冲时间,这段时间内新旧代码同时兼容。普通用户不需要看文档,旧代码会自动触发警告,只要看到警告信息就照着修改代码即可。

RawAsset 是当初 Cocos2d-html5 融合 Fireball 0.5 时,为了兼容大量 Cocos API 而发明的一个概念(当初我也不熟悉 Cocos 的 API 不敢乱改)。这个概念和 Creator 现在的主流资源管理流程相悖,成为了一个影响引擎和编辑器开发效率的技术债(脑力减速带)。

为了更充分的利用人力资源,加快后续的资源相关功能实现,我打算从 1.7 开始加速 RawAsset 废除工作,最终彻底去除预计在 2.0 完成。
如果你直接在代码中使用到了 RawAsset,升级到 1.7 - 1.9 中的任意版本,可能会出现不少警告,警告不影响游戏运行和发布,只要照着警告修复代码警告就会消失。但如果是从 1.6 直接升级到 2.0,项目可能无法运行。


目前想到要升级的代码主要是 CCClass 中的属性定义,以 Texture2D 这个最常见的 RawAsset 为例:

ES5 支持两种定义方式:

cc.Class({
  properties: {
    texture1: {
      url: cc.Texture2D,        // declared as url string
      default: "",
    },
    texture2: cc.Texture2D,     // auto declared as url string
  }
});

从 1.7 开始 texture1 将出现 log,texture2 将出现 warning,提示用户全部改成

texture: {
    type: cc.Texture2D,   // declared as Texture2D object
    default: null,
}

注意 url: 变成了 type:,修改后变量将会变成 Texture2D 对象,而不再是一个 url 字符串。(现在你们能理解为什么之前一直不肯大家直接写 type: cc.Texture2D 了吧,都那么写现在我就只能跪厕所哭了)

从 2.0 开始旧的 texture1 的写法将会报错。旧的 texture2 的写法将会重新支持,不过反序列化后得到的值就是一个对象而不再是 url 了。


同样的,之前如果在 ES6 或 TS 中定义

@property(cc.Texture2D)
texture1 = "";            // auto declared as url string

@property(cc.Texture2D)
texture2 = null;          // auto declared as url string

@property({
    url: cc.Texture2D,    // declared as url string
    default: ""
})
texture3 = "";

从 1.7 开始 texture2 将出现 warning,texture1 和 texture3 将出现 log,提示用户全部改成

@property({
    type: cc.Texture2D,   // declared as Texture2D object
    default: null,
})
texture = null;

修改后变量将会变成 Texture2D 对象,而不再是一个 url 字符串。

从 2.0 开始旧的 texture1 和 texture3 的写法将报错。旧的 texture2 的写法将会重新支持,不过反序列化后得到的值就是一个对象而不再是 url 了。

2赞

AudioClip也和Texture2D是一样的吧。。。。。
我之前基本使用2种(主要是TS声明的区别)

@property({
url : cc.AudioClip,
tooltip: ‘背景音乐’
})
BGM:string = null;

@property({
    url: cc.AudioClip,
    tooltip: '结束的音频'
})
timesUpAudio = null;

看来又要改一波了,好在第一种声明了TS类型的不多,大部分都没声明类型。。。。。:12:

是的,audio clip 也要改。 audoEngine 会尽量兼容新旧两种用法,争取只需要改 class 声明。

能这样最好:clap:
作为一款平台软件,应该考虑尽量兼容老版本的代码。
可惜js(TS)好像没有所谓的deprecated,不然应该会方便很多~~~~

看来1.6.2会在这两天出来了, 不容易啊, 等了好久.

@jare 请问,那么在热更里用到的project.manifest 这个的类型是 cc.RawAsset的,我替换成什么呢?

需要升级引擎的话本来就不能热更新,需要重新发包

cocos creator 版本号:1.6.1版本构建的windows模拟器代码spidermonkey编译失败
创建新主题好难啊,这个网站有点让人头疼。感觉自己有点老了,竟然搞不懂发帖了。本想提醒下其他遇到问题的人,在这里发下吧

非常期待2.0

支持支持

当断则断,欲练神功. 支持,哈哈哈
但是1.6.2赶紧出来啊…

到时候,做冷更新~~

代码大部分直接用loadres接口,影响很小

跳过1.62版本了吗? 如果有1.62版本,大概什么时候出来啊,等这个版本上app store呢

1赞

同样再等…呼唤1.6.2!!!

1赞

我也不知道有没有 1.6.2,这种事情你们应该直接问 @nantas

什么时候出1.6.2呢,在等一个webview的资源释放的功能修复合并到新版本@nantas

升级了1.6 直接升 2.0.但是 吧这些 定义 都手动 改掉 是不是应该 可以运行呀?@jare

看不懂你问的点在哪里

有1.6.2,正在测试中,应该下周就差不多能放出来。

Cocos Creator v1.6.2 内测发布帖