2.0后闪屏的BUG大家都是怎么修复的

2.0.6版本报错机制报的是 引擎内部,怎么不报脚本哪里调用的呢?没法修复啊。
Simulator: E/jswrapper (521): [ERROR] (…\cocos\scripting\js-bindings\jswrapper\v8\Object.cpp, 521): Invoking function (068B0728) failed!
at HTMLElement.print-simulator-log (D:\CocosCreator\resources\app.asar\editor\builtin\scene\panel\messages\scene.js:1:1487)
at Object.e._dispatch (D:\CocosCreator\resources\app.asar\editor-framework\lib\renderer\panel.js:1:1941)
at EventEmitter.o.on.s (D:\CocosCreator\resources\app.asar\editor-framework\lib\renderer\ipc.js:1:2917)
at emitMany (events.js:127:13)
at EventEmitter.emit (events.js:204:7)

Simulator: D/jswrapper (129): JS: LoadScene 7b486d14-13bc-4be8-91e6-2efa50fc8715: 107.10100000000057ms

Simulator: E/jswrapper (271): ERROR: Uncaught TypeError: Cannot read property ‘length’ of null, location: src/cocos2d-jsb.js:0:0
STACK:
[0]visitNode@src/cocos2d-jsb.js:20762
[1]autoRelease@src/cocos2d-jsb.js:20770
[2]runSceneImmediate@src/cocos2d-jsb.js:6885
[3]anonymous@src/cocos2d-jsb.js:6978
[4]anonymous@src/cocos2d-jsb.js:24804
[5]anonymous@src/cocos2d-jsb.js:20222
[6]anonymous@src/cocos2d-jsb.js:29405
[7]fireTimeout@jsb-adapter/jsb-builtin.js:2033
[8]tick@jsb-adapter/jsb-builtin.js:1995
E/jswrapper (521): [ERROR] (…\cocos\scripting\js-bindings\jswrapper\v8\Object.cpp, 521): Invoking function (068B0728) failed!
at HTMLElement.print-simulator-log (D:\CocosCreator\resources\app.asar\editor\builtin\scene\panel\messages\scene.js:1:1487)
at Object.e._dispatch (D:\CocosCreator\resources\app.asar\editor-framework\lib\renderer\panel.js:1:1941)
at EventEmitter.o.on.s (D:\CocosCreator\resources\app.asar\editor-framework\lib\renderer\ipc.js:1:2917)
at emitMany (events.js:127:13)
at EventEmitter.emit (events.js:204:7)

此错误出现在切换场景时。

操作系统:win?mac?
测试平台:webpc?模拟器?
重现步骤:?

加载空场景没事,我的检查下我的场景啦!

win7,谷歌,火狐,之类浏览器没事。
模拟器和真机有事

如何重现呢

我正在检查我的场景那个地方用了什么东西,要加载场景的根节点脚本——进行了引入其他JS脚本做了很多初始化。
我先注释掉看下

对了我用了socket.io

发现问题啦。之前场景根节点挂的脚本,进行了很多JS文件引入,一些逻辑的初始化。要加载的场景onload时,使用了上个场景js文件引用所初始化的方法。

那么现在2.0之后让一个节点保持住成为常驻节点,不被切换场景卸载掉怎么做

一样的

最终原因是写法上的错误。我贴出来吧:
这个是管理音乐播放的JS文件。

getAudio:function(audio,type){
self = this;
cc.loader.loadRes(“sounds/”+audio, cc.AudioClip, function (err, audioClip) {
if(err){
cc.log(""+err);
}else{
if(type == “BGM”){
self.bgmAudioID = cc.audioEngine.play(audioClip,true,self.bgmVolume);
}else if(type == “SFX”){
cc.audioEngine.play(audioClip,false,self.sfxVolume);
}
}
});
},

playBGM:function(audio){
    cc.log("BGM:"+audio);
    if(this.bgmAudioID >= 0){
        cc.audioEngine.stop(this.bgmAudioID);
    }
    this.getAudio(audio,"BGM");
},

playSFX:function(audio){
    cc.log("SFX:"+audio);
    if(this.sfxVolume > 0){
        this.getAudio(audio,"SFX");  
    }
},

这种写法是在读取音频文件的线程中里面进行播放音乐。
这个不安全。
最后还是读取音频后返回下。使用一般的方式播放,下面是稳妥的。

getAudio:function(audio){
    cc.loader.loadRes("sounds/"+audio, cc.AudioClip, function (err, audioClip) {
        if(err){
            cc.log(""+err);
        }else{
        return audioClip;
        }
    });
},

playBGM:function(audio){
    cc.log("BGM:"+audio);
    var onAudio = this.getAudio(audio);
    if(this.bgmAudioID >= 0){
        cc.audioEngine.stop(this.bgmAudioID);
    }
    this.bgmAudioID = cc.audioEngine.play(onAudio,true,this.bgmVolume);
},

playSFX:function(audio){
    cc.log("SFX:"+audio);
    var onAudio = this.getAudio(audio);
    if(this.sfxVolume > 0){
        var audioId = cc.audioEngine.play(onAudio,false,this.sfxVolume); 
    }
},

在2.1.0版本,资源加载时:return audioClip;返回是个空,所以呢还是使用之前的吧,加载后调用方法来播放