之前加载二进制文件使用了 cc.loader.addDownloadHandlers 注册自定义的加载方法:
//注册dat文件下载处理器
var arrayBufferHandler = function (item, callback) {
var url = item.url;
var xhr = cc.loader.getXMLHttpRequest(),
errInfo = ‘Load ’ + url + ’ failed!’;
xhr.open(“GET”, url, true);
xhr.responseType = “arraybuffer”;
xhr.onload = function (oEvent) {
var arrayBuffer = xhr.response;
if (arrayBuffer) {
callback(null, arrayBuffer);
}
else {
callback(errInfo); // 第一个参数需要传递错误信息
}
};
xhr.send(null);
};
cc.loader.addDownloadHandlers({
‘dat’: arrayBufferHandler
});
但是在微信开发者工具中,我使用pako库解压下载的二进制压缩文件,pako内部报错了,说明下载的内容不对,有可能是微信环境不支持 cc.loader.getXMLHttpRequest(), 方法吗?谢谢 ! @jare @panda
我查了一下,好像微信小游戏环境是和之前web mobile有区别。
web mobile里是一个http request下载的,在小游戏里面引擎使用了一个web socket去下载。不知道是否是web socket下载完成之后将内容保存成了文本,有点像啊
找到了,二进制文件被包装到一个文本协议里面返回了,就变成了乱码的文本。@Jare @panda 有么有workaround啊各位大哥
补充:我试图找这个web socket是在哪儿,然而在引擎的代码和wx-downloader.js里面都没有找到,猜想是wx sdk里面实现的,可能是fs.access和fs.readFile内部实现的,应该不是downloadRemoteFile调用的,因为没走到那儿。
