每次的加载都是独立的
Cocos的cc.loader.loadRes
会启动一个单独的线程去加载资源,同时Cocos允许带一个回调函数,这个函数会在加载完成后调用。
匿名函数可以使用上下文变量
这就带来一个问题,在回调函数中使用的循环变量,再被调用的时候值可能不是期望的。举个例子
for(let i = 0;i < arr.length;i++){
cc.loader.loadRes(path,type,(err,res) => {
res.name = '' + i;
/*
由于资源加载是独立的,那么有可能第一次调用i的时候循环
已经进入了第二次甚至第三次
*/
})
}
因此如果要保证循环变量与回调函数的同步需要使用特殊的一些手段。
比如在回调函数中使用递归可以解决这个问题,保证了资源加载的执行顺序。
let callback = (err,res) => {
if(i!==arr.length){
res.name = '' + i++;
cc.loader.loadRes(path,type,callback);
}
};
cc.loader.loadRes(path,type,callback);