从Cocos Creator 1.4.2升级到1.5.2遇到的问题,以及解决方案和一些小建议

打印出的日志

Cocos2d-x-lite v1.5.2
(evaluatedOK == JS_FALSE)
F:\xxx\xxx\build\jsb-default\src\jsb_polyfill.js:17:TypeError: cc.ProgressTimer is undefined

Evaluating main.js failed (evaluatedOK == JS_FALSE)

找了一圈儿无法解决问题之后,求助引擎开发人员 Panda,咨询确认之后,得到的回复是:

从1.5之后添加了更强的Sprite的fill,为了API的统一就把cc.ProgressTimer给移除掉了,现在造成的问题是我之前打出来的所有包都用不了,要么重新打包,要么不升级引擎仍采用1.4.2,有问题我也无法能过升级引擎来达到解决

唉,这个我真的不知道该说什么:pensive:

为什么不把不推荐使用的API标记成[否决的],如果不能标记成[否决的],要以的官方的API文档中添加否决的,不推荐使用的,后面加上推荐使用的API链接,虽然这可能会增加你们的工作量,但是作为使用cocos2d-x引擎的开发者,我们肯定会很感谢你们的,这样也有利于你们新版本的占有率,试想如果一直出现这样的问题,谁还愿意使用新版本的引擎,谁还会用这样的引擎

我想大家应该都知道微软的手机应用为什么数量一直上不去,活生生的例子

这是我给引擎开发人员提的一点点建议,希望你们会越做越好

就这样吧,还要去解决当前遇到的问题,唉…:pensive:

1赞

其实 Creator 从第一个版本的 API 开始就没有 cc.ProgressTimer,包括目前很多人用的 cc.RenderTexture 在 API 集中也是不存在的

http://cocos.com/docs/creator/api/

这个事情确实很尴尬,一方面在初期我们没有精力扫描所有的 API 去除干净没有必要的,一方面用户也带有 cocos2d-x / cocos2d-js 的使用习惯,所以直到现在依然有人遇到类似的问题。

这个我只能说很抱歉,建议对 API 有疑问的时候查一下 API 文档,目前看起来比较尴尬的就只有 RenderTexture 了,我们暂时还没有计划去除,在没有替代方案之前不会动,动的时候也会尽量兼顾大家的使用习惯,给出升级策略。

嗯,API的保留与去除确实不太好处理,一但发出去后,就有可能会有人用,最后就会变成历史遗留问题,一旦下决心去处理后,发现有的人肯定会受到影响

我这个问题我检查了一下项目,我们没有用到cc.ProgressTimer,是打包后在src/jsb_polyfill.jsc这个文件中存在的,之前打的包里面的jsb_polyfill.jsc包含的,现在换了引擎后,里面没有定义这个cc.ProgressTimer,然后就报错了,我的解决方案是替换之前打的包的jsb_polyfill.jsc,但是还是存在一些问题,我还需要修改一下

还有一个问题是调用

AudioEngine::end();

在以下位置会崩溃

ALOGVV("Before alSourceStop");
alSourceStop(_alSource);

以下问题已解决


现在跳出一个新的问题,第二次加载资源时会跳转到,一个断言:

CCASSERT(0, "Unsupported format for depth and stencil buffers. Using default");

因为之前没有问题,现在我还不清楚,这个是什么地方引起的
我看了判断条件中的值如下:

_glContextAttrs.depthBits值为16
_glContextAttrs.stencilBits值为nil

开发环境是:Xcode 8.3.3 + iPad mini 4 10.3.1


在使用 RenderTexture 的截屏的功能的用户表示很害怕呀…

我不是很理解你的意思,在升级引擎之后,应该删除旧的 build 目录,重新构建,此时会用新引擎的 jsb_polyfill.jsc 覆盖之前的。

你遇到的问题可能是版本不匹配,比如没有删除 build 目录,直接构建,此时应该会提示引擎版本不匹配,这样运行的话多半是跑不起来的,因为 jsb_polyfill.js 是跟原生引擎版本绑定的。

会有替代方案的,也会共存一两个版本

  1. 以前用的CC 1.4.2打的包,Build生成的jsb_polyfill.jsc是对应1.4.2版本的引擎,并且我的Native项目中集成的引擎cocos2dVersion为1.4.1

  2. 现在我把Native项目中的引擎替换成了CC 1.5.2中带的引擎,cocos2dVersion为1.5.2

  3. 现在用cc2dVer为1.5.2加载cc2dVer为1.4.1 Build出来的src中的文件,昨天报的一个错误是cc.ProgressTimer未定义,昨天咨询你,你说的是被移除了,按上面的解释应该是原生引擎与jsb_polyfill.jsc不对应了

  4. 我把以前用CC 1.4.2 打好的包(src)中的jsb_polyfill.jsc替换成当前引擎对应的就可以打开了,这样我就不用重新打包了

请问现在renderTexture还能用吗,我的creator版本是1.5.1,现在用RenderTexture截屏会出现背景是白色的问题