2.0.5 资源加载的一个bug。

条件比较复杂,过程大概是这个样子:
1,先预加载一个game.fire 场景。
2,等待加载完成。
3,加载一个复杂点的资源X,我这里是一个龙骨+相关图片的一个文件夹。
4,在加载这个资源成功后立刻 cc.director.loadScene(“game”) 切换场景。
5,这时候会提示场景加载错误

Failed to load scene: Error: [AssetLibrary] loading JSON or dependencies failed: Unknown error

分析原因
问题主要出在 var queue = LoadingItems.create 的回调上,因为资源X比较复杂,这个回调会调用两次,而且呢,回调又是通过 callInNextTick 调用的,有时间差,最后实际的执行过程是这样的

时间周期1
queue.create by resX

时间周期2
resX complete callInNextTick1
resX complete callInNextTick2 <- 重复执行了一次

时间周期3
callInNextTick1 执行
queue.destory <- 回收到了pool里面
通知 resX 加载完成
cc.director.loadScene(“game”)
queue.create by loadScene <- 这里又重新复用了刚刚被干掉的那个queue。

game complete callInNextTick3 <-因为之前预加载过game.fire。直接就complete了,但是回调要下一个周期才执行。

callInNextTick2 执行
queue.destory <- 刚刚复活的queue又被干掉了

时间周期4
callInNextTick3 执行
queue已经被干掉了,判断加载失败

暂时的解决方案
切换场景也延长一个周期。

setTimeout(()=>cc.director.loadScene(“game”));

但是在游戏运行过程中肯定还会有这样的问题。比如加载一组资源A,在他成功的那个时间周期恰好又开始加载其他资源B
。如果资源B之前加载过,就有可能被判定为加载失败。

不知道你们能看懂不,对着底层代码debug了一晚上。没精力再弄个复现用的工程了,过程说的比较详细了。希望你能够解决

龙骨资源文件
e1.zip (25.0 KB)

加载龙骨所在的文件夹这样的:

    var promise = new Promise(function (resolve, reject) {
        cc.loader.loadResDir( _this.path  , function (err, assets) {
            if( err ){
                reject( " ____error" + _this.path );
            }
            resolve(  );
        });
    });

@jare

你终于说出了我表达不出的内容,我一起等待结果~

你这算是异步加载过程,切场景吧,目前的资源管理确实不允许这样的执行逻辑的。

是加载完成才切的

你好!如果我没有理解错的话,你说的流程应该是类似下面这段代码吧

var launchScene = 'db://assets/test.fire';
		cc.director.preloadScene(launchScene, 
			function (completedCount, totalCount, item) {
				var percent = 100 * completedCount / totalCount;
				console.log(percent);
			},
			function (err, data) {
				cc.loader.loadResDir('/',(err, data)=>{
					if (err) console.log(err);
					cc.director.loadScene(launchScene, function () {
						console.log('Success to load scene: ' + launchScene);
					});
				});
			}
		);

我使用了你给的dragonbone放在resources根目录下,使用2.0.5引擎,在Web平台能够正常加载且没有错误信息,请问你的是什么平台呢

当时在座facebook平台,会出现这个问题
后来是在web平台调试这个问题。
加载的资源不只龙骨这个文件夹,是好多资源,只是龙骨这个是最后一组资源。

解决了吗?我概率性出现这个问题