从 自定义ttf导出到微信小游戏真机提示找不到 继续讨论:
从 Cocos Creator v2.0.6 更新说明 继续讨论:
本人使用的引擎版本是2.1.2
看了多个版本的cocos2d-js里关于下载的代码,这个限制并没有用(2.0.9、2.1.2、2.2.0),在wx-fs-utils里找到发送请求的地方,打log,查看协议发送次数,并没有像预想的限制在
cc.macro.DOWNLOAD_MAX_CONCURRENT=10以内,而是一直涨到了40多个并发。。。
在微信开发者工具上不会出现卡死,在安卓真机上也不会,但是在iOS设备上(iphone和ipad)都会出现卡死现象。
测试代码段:
function downloadFile (remoteUrl, filePath, callback) {
curDownloadCount++;
console.log(“before curDownloadCount:” + curDownloadCount);
wx.downloadFile({
url: remoteUrl,
filePath: filePath,
success: function (res) {
curDownloadCount–;
console.log(“success curDownloadCount:” + curDownloadCount);
if (res.statusCode === 200) {
callback && callback(null, res.tempFilePath || res.filePath);
}
else {
if (res.filePath) {
deleteFile(res.filePath);
}
console.warn("[downloadFile]Download file failed: " + remoteUrl + “,res.statusCode =” + res.statusCode);
console.warn("[downloadFile]" + res.errMsg);
callback && callback(new Error(res.errMsg), null);
}
},
fail: function (res) {
curDownloadCount–;
console.log(“success curDownloadCount:” + curDownloadCount);
console.warn("[downloadFile]Download file failed: " + remoteUrl);
console.warn("[downloadFile]" + res.errMsg);
callback && callback(new Error(res.errMsg), null);
}
});
}
于是将downloadFile中的wx.downloadFile进行封装
function SendMsg(remoteUrl,callback){
wx.downloadFile{…}
}
修改downloadFile 为如下,目的是在出现高并发时,延迟n秒再下载新的资源,防止出现并发导致下载不到的问题
function downloadFile (remoteUrl, filePath, callback) {
if (curDownloadCount > 30) {
setTimeout(function() {
SendMsg(fileId, callback);
}, 4000);
}
else if (curDownloadCount > 10){
setTimeout(function () {
SendMsg(fileId, callback);
}, 2000);
}
else {
SendMsg(fileId, callback);
}
}
本来想修改引擎源码,但是尝试了几次后发现还是不好使,就先这么改了,这么改会出现在某个玩家高峰下载时卡在某个loading数值中,但最后还是会下载成功,相比之前的下载不到,微信返回 data no response,始终卡在loading界面,是可以接受的效果,不过还是希望引擎组能排查一下为什么没有限制住10这个值,查看了2.1.2和2.2.0的相关代码段,逻辑都是这样。也尝试了《动物餐厅》作者的写法,测试后也是卡死,可能我的cocos 版本跟他不一样吧。。。而且看jare大大说有问题,就放弃了,先这么改着。