creator的loader似乎没有这个方法?
目前没有这个方法,你的需求具体是什么样的?服务端存储 binary ?用什么格式呢?
完全自定义的格式。希望能返回一个ArrayBuffer.
ArrayBuffer 是可以通过 XMLHttpRequest 来传递的,我们的 loader 也可以定制
var arrayBufferHandler = function (item, callback) {
var url = item.url;
var xhr = cc.Pipeline.getXMLHttpRequest();
xhr.open("GET", url, true);
xhr.responseType = "arraybuffer";
xhr.onload = function (oEvent) {
var arrayBuffer = xhr.response;
if (arrayBuffer) {
var result = new Uint8Array(arrayBuffer);
// 任何需要的处理
callback(null, result);
}
else {
callback(errorMessage); // 第一个参数需要传递错误信息
}
}
// 错误处理
xhr.onerror = ... // 同样需要调用 callback 返回错误信息
xhr.send(null);
};
cc.loader.addDownloadHandlers({
'ab': arrayBufferHandler
});
这样处理的话,如果你的服务端文件后缀名是 .ab 就可以匹配到 arrayBufferHandler。
参考文档: https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Sending_and_Receiving_Binary_Data
如果文件是本地缓存的(jsb),也是通过XmlHttpRequest处理的吗?
JSB 的本地文件不行诶,jsb.fileUtils.getDataFromFile(url) 来获取 ArrayBuffer 对象,获取的是一个 Uint8Array
cocos creator中通过模拟器运行时,fileUtils读取不到资源,因为simulator目录里没有资源。
我不是很清楚cc.loader内部如何工作的,cocos creator中通过模拟器运行时,也算是jsb吧? download handler是如何读取到 assets/resources里的资源的呢?
看了一下text-downloader.js,里面有关于jsb的代码。我再试试。
这样的功能,强烈建议 build 出来再测试~ 在模拟器中,需要用正确的路径才可以,相对路径不行
那样是可以,但是调试起来就太麻烦了。而且没法在cocos creator里直接预览。
jsb 的效果在 creator 的编辑器里面肯定无法直接预览,其实你 build 出来以后,用 Xcode / VS 调试,更友好一些,log 看得也清楚。Creator 中更新了以后,点一下 build 很快,如果用 jsb-binary 模版,编译也非常快
确实有加载二进制文件的需求,请问引擎方面有计划把这个接口加上吗?
最方便的肯定还是能在浏览器里面跑。一边开发一边看效果,用chrome调试的便捷绝对是编译出来用Xcode/VS调试没法比的。
不要因为用的人少或者大神们觉得开发人员用不到就不提供嘛。
顶这个功能。现在我使用的是变通的方法,原因是我们需要压缩一下资源,但是cc.loader不能载入压缩后的二进制。我们解决的方法是将压缩文件存成文本格式,使用python的repr方法将二进制的内存表示转成文本,然后在js里面用eval去执行,就得到了二进制的内存数据。但是这样转出来的文本文本比二进制文件要大不少,压缩的作用聊胜于无了
请问这么设置之后 调用下载怎么用呢
cc.loader.load({url:“http://192.168.6.214/Test/test.ab",id:"ab”},function (err,data){
console.log(“errerrerrerrerr===”,err);
console.log(“datadatadatadata===”,data);
});
是这么调用么 我这边想用loader下载声音文件到本地 然后播放 这个应该怎么实现呀
1.6.2里面框架有个binary-downloader.js的实现,请问跟你这个实现哪个更好点呢?
这里改为 cc.loader.getXMLHttpRequest();
你好!这个方法在h5里面可以用了(当然1.8.1需要修改一下接口),但是导出native就不行了,本来资源应该导出到包里面的,使用这个方法后会试图去下载,并且下载失败,报错:
Starting to load res/raw-assets/resources/data/1.dat
NSURLConnection finished with error - code -1002
麻烦看一下,有没有可能在natvie里面从bundle或者sandbox载入自定义格式的二进制文件?万分感谢!!!
二进制文件的加载还是有必要支持的
另外 像图片这样的引擎内置资源类型最好支持下从内存创建
如果两者都支持的话,就可以自定义资源格式,对于资源保护有很重要的意义
这是引擎设计不合理的地方。
用户应该自行决定使用一种类型启动加载这一种(唯一一种)方式即可。
并不需要根据后缀自动判断类型后返回
只需要提供loadImage loadText loadBinary集中方法就足够了。
我觉得引擎需要提供几个层次的接口
首先 loadRes 最少要支持两种方式 fromFile和FromMemory 现在像H5这样的web环境 还需要一种FromUrl
然后加载文件 支持 LoadFile FromLocal 和FromUrl 支持文本和二进制两种
这样的 无论是使用方便性还是资源格式自定义都可以很好的满足
现在unity的那一套资源加载就完全实现上面说的各种