1.5.2beta2浏览器上调用this.node.stopAllActions()报错

问题1:或许我是调用this.node.stopAllActions()时节点没有正在执行任何动作造成的,但是团队就不能改改判断吗,改成动作列表为空的话不执行任何操作不行吗,非要整成报错?还有cc.audioEngine.stop(ID),传入参数为空也报错,不能改成不执行吗。cc.audioEngine.stopAll()不就没有这个问题吗,调用时无论当前有没有正在播放的音效音乐,都能正常执行,而不是报错卡死。

问题2:模拟器测试时即使有很多错误的语句也不会报错卡死,而是没有执行任何效果(不限于 Action),那么为什么模拟器能这样呢?

问题3:我加了个动作列表是否为空的判断还是不行,还是报错,
if(this.node.getNumberOfRunningActions()>0){
this.node.stopAllActions();
}继续报错

还有cc.audioEngine.stop(ID),传入参数为空也报错,不能改成不执行吗。

这是为了让开发者在开发过程中更快更早发现问题,如果引擎把这部分问题遮蔽了,一方面不正常的表现的原因开发者无从得知,一方面这种容错和判断也会给引擎运行造成更多的开销。

stopAllActions 不会因为没有执行任何动作而报错,这是你对当前报错的误判,至少应该点开报错位置和调用栈看一下报错的原因,从 CCActionManager 181 行来看是 actionManager.removeAction 的时候报错,如果点开调用栈你会更精确得定位到是业务代码的什么位置导致的出错。由于问题的判断错误,你问题三中提出的那种方式自然无法解决问题。

大多数情况下应该会黑屏,跟卡死也没什么区别,就好像浏览器上报错也并没有导致页面崩溃一样。当然也可能你遇到了其他的非致命错误,让 JSB 引擎还能继续执行,比如一些业务函数中的一些错误代码会导致函数停止执行,但是帧循环并没有停止。当然 native 和 web 还有很多底层差异存在,我们并不倾向于保障所有错误的表现都一致。而是更侧重于尽量保障正常运行的表现一致并在出错时提醒开发者。

一开始调试没有任何调用栈信息,后来换了几个节点来调试才有调用信息,原来是另外一个节点在没有执行任何动作的情况下调用了someNode.stopAction(ID)报的错。stopAllActions 不会因为没有执行任何动作而报错,但是.stopAction(ID)会因为没有执行任何动作而报错,是这样吧?