cc.loader.load()加载自定义二进制文件的问题

cc.loader.load( cc.url.raw(“xxx.bin”), function(err, data) {
cc.log(data.length)
} )

加载完成后返回的内容长度少了几个字节, 内容也不对。

up, 求版主回答

var arrayBufferHandler = function (item, callback) {
var url = item.url;
var xhr = cc.loader.getXMLHttpRequest();
xhr.open(“GET”, url, true);
xhr.responseType = ‘arraybuffer’;
xhr.onload = function (oEvent: ProgressEvent) {
var arrayBuffer = xhr.response;
if (arrayBuffer) {
var result = new Uint8Array(arrayBuffer);
result = result.slice(result.byteOffset, result.byteOffset + result.byteLength);
callback(null, result);
}
}
xhr.send(null);
};

	cc.loader.addDownloadHandlers({
		'binary': arrayBufferHandler
	});

官方推荐自定义加载器,用cc.loader加载"binary"格式文件时就会触发arrayBufferHandler,通过XMLHttpRequest返回二进制数据。 不过这种方式在微信小游戏平台无效,自定义加载器不会触发

1赞

非常谢谢,刚才看了engine源码也发现了, 默认使用的text-downloader, 没有设置responseType, 不过responseType=‘arraybuffer’ 需要XMLHttpRequest2.0 开始才支持,不知道浏览器兼容性如何