【2.1.0】 最蛋疼的 区别! 没有之一

2.1.0 之前的版本,如果 程序发生意外 如某个prefab出现异常。程序还是能跑。
2.1.0 直接整个程序 卡死。

写3D 这块是不是 换了一波人了? 2.1.0 从正式版变成 bate 几个月了,真担心 GG。。。 现在项目用的 2.1 ,还没做完,
都感觉要滚回 2.0 时代 了。

这个的复现情况是怎样的

一个脚本挂一个节点上 启动settimeout 调用自身的方法。在调用时 这个节点已被销毁。然后就挂了。

那么这个方法不应该加个判断节点是否已经被销毁了么

那 所有脚本都得加了。

顺便 问下 游戏已运行,进行热更。执行 cc.game.restart 无效。而关闭游戏之后 再启动就可以了。这个是啥问题?

已经被销毁的怎么还可以去使用。。。内存管理和异常处理的问题无论写什么程序都需要自己去注意吧。。。

1赞

老哥,未定义行为不管出什么幺蛾子就算格了你的盘(虽然要尽可能避免不良影响)你都没理由指责人家的,不然C++标准定义了那么多UB岂不是就没法做编译器了
对未定义行为应该是要尽可能规避,而不是幻想人家能带病继续跑,更别说把未定义行为的实际运行表现当作知识还加以利用了
都是成熟程序员了,自己成熟一点不好么

整个不是简单的报错 异常。 简单的例子,说明 setTimeOut 有风险。
ERROR: TypeError: null is not an object (evaluating ‘this.node._activeInHierarchy’), location: src/cocos2d-jsb.js:14536:34

引擎在这里 直接就崩了,原生报。 你确定 你写的东西,都自己管理注意 要引擎干啥。

这个api应该是有效的。你的测试平台是什么?

苹果 imax plus 真机测试。
如果重启游戏也是不行,那我的热更逻辑绝对是错误的,
但是它现在热更后,无效,关掉游戏再打开后又可以了。

版本 : 2.1.0

else if (window.jsb) {
let hot = window.jsb.fileUtils.getWritablePath() + ‘cache’;
window.jsb.fileUtils.addSearchPath(hot, true);
require(‘src/settings.js’);
require(‘src/cocos2d-jsb.js’);
require(‘jsb-adapter/engine/index.js’);
window.boot();
}

emmm…这也算不上什么风险吧,既然setTimeOut回调内操作的node可能已经被销毁,那么就应该在node.onDestroy()中clearTimeout或者在setTimeOut的回调中做好判断,在这点上引擎应该很难做什么帮助吧。

还是 用 它 的 sequence 保守点。

也就是说在这个机型上cc.game.restart() 无效么,你能否用helloworld项目测试一下。

私信了。提供了demo 还望帮忙看看。不胜感激!

ok 我明天帮你看看。

帮忙 再看下 私信。