Creator 2.2.1版本calculateDeltaTime死循环了



上面是微信后台的报错,报错次数挺高的,我自己遇到过两次,求引擎大佬重视一下

能查到什么原因导致的么?你本地能复现么?

暂时没查到,出现概率不高 :sweat:

2.2.1测试版本 就已经线上概率出现 this._deltaTime < 0后 再次计算时间 但一直都是<0 死循环了

微信确实有可能在启动的第一帧出现时间回退的情况。按理说后续就不会这样了,做个保护吧 @337031709

嗯,我看下。

请问问题解决了吗,我的游戏线上很多报这个递归的错

你试下这样改下:

if (this._deltaTime < 0) {
   this._lastUpdate = now;
   this.calculateDeltaTime();
   return;
}

我本地没能复现问题,现在不太确定 now 这个参数的变化规律是什么,现在假定 now 在一次异常变小之后稳步增大,那么这样修改应该能够解决问题。

可以试试我的回复里的做法。

2.2.1 正式版本发的微信开发版,也遇到了这个问题:
Maximum call stack size exceeded;at requestAnimationFrame callback function
RangeError: Maximum call stack size exceeded
at 28.cc.Director.calculateDeltaTime (https://usr/game.js:3:126319)
at 28.cc.Director.calculateDeltaTime (https://usr/game.js:3:126412)
at 28.cc.Director.calculateDeltaTime (https://usr/game.js:3:126412)
at 28.cc.Director.calculateDeltaTime (https://usr/game.js:3:126412)
at 28.cc.Director.calculateDeltaTime (https://usr/game.js:3:126412)
at 28.cc.Director.calculateDeltaTime (https://usr/game.js:3:126412)
at 28.cc.Director.calculateDeltaTime (https://usr/game.js:3:126412)
at 28.cc.Director.calculateDeltaTime (https://usr/game.js:3:126412)
at 28.cc.Director.calculateDeltaTime (https://usr/game.js:3:126412)
at 28.cc.Director.calculateDeltaTime (https://usr/game.js:3:126412)

手动改一下 cc.Director.prototype.calculateDeltaTime方法就行了

请问我那样修改能解决问题么,我本地复现不了问题。

我这边暂时没遇到了,下周线上更新了再看看

嗯嗯嗯

请问现在情况怎样。。。


我是1.9.5版本开始更新的,相比上个版本报错次数少了很多,但还是有出现报错的情况,很奇怪

你好,我改了还是一样出现这个问题,很多玩家在10+秒流失了。。。因为进不来游戏
我改了CocosCreator_2.2.1\resources\engine\cocos2d\core\CCDirector.js里的
编译以后的cocos2d-js-min.js里面是这样的:就是我改成功了吧?
calculateDeltaTime:function(t){if(t||(t=performance.now()),this._deltaTime=(t-this._lastUpdate)/1e3,this._deltaTime<0)return this._lastUpdate=t,void this.calculateDeltaTime();this._lastUpdate=t}

会不会是微信新的引擎插件搞的?我改了这里,但是微信那的引擎里还是老的?

很抱歉,这个代码是由于之前要修复这个问题:


而添加的,试试参考这个 PR 相同的方案修改一下引擎代码:
https://github.com/cocos-creator/engine/pull/5952

上周更新了这个修改
目前为止没有观察到上报了。

修改有效。

1赞

好的,谢谢反馈,最好是更新到和我 PR 一样的代码,因为之前那样也还是可能出现异常。