急急急~ccc2.0 的cc.Asset 如何获取自定义加载二进制文件的内容

如题,我使用http://forum.cocos.com/t/cc-loader-loadbinary/39433/3

这里的方式加载了自定义扩展名的二进制文件,原来在2.0以前的版本完成后是直接返回加载的二进制内容(ArrayBuffer)的,可以直接使用,2.0里返回的事cc.Asset类型了,请问如何取得具体的二进制文件内容呢?

我是直接用get的 然后取的是blob类型的东西,然后转成arraybuffer 然后处理

getRes?,返回的是cc.Asset类型啊,这个类型没看到有什么属性和方法可以取到arraybuffer啊?求指点~

export function getRecordData(Url: string) {
  return new Promise<DataView>((resolve, reject) => {
    let req = new HttpBase();
    req.setresponseIsArrayBuffer();
    req.open<ArrayBuffer>(msg => {
      try {
        //logger.logObj(msg);
        let dataView = new DataView(msg);
        resolve(dataView);
      }
      catch (err) {
        reject(err);
      }
    }, "GET", Url)
    req.send();
  });
}

这里的 HttpBase 是我对 xmlhttprequest 对象的封装

setresponseIsArrayBuffer() {
        this.reqins.responseType = "arraybuffer";
}

reqins 是 new XMHttpRequest() 出来的对象

哦,自己这样加载肯定可以,我是想走cc.loader这个,这样native和web等多平台都可以统一,原来在2.0以前都可以正常的,我就想知道官方是不是改动的时候忽略了自定义这个使用方式:slightly_smiling:,不过还是谢谢你了!

好吧 你@下引擎组的人啊

native 环境下 不是都也实现了 xmlhttprequest 和 websocket 对象的吗?

应该 native 这样写也行吧?

不行的,native要用jsb的,反正以前我是用jsb弄的

参考v1.10 资源升级指南,二进制内容的话,需要用 cc.Asset.nativeUrl 获得原始 url 才能进一步加载。

意思是我要自己通过cc.Asset.nativeUrl自己做一遍加载操作?应该不需要吧?我在控制台已经看到文件被加载了,如图:

,只是我没办法获取加载的内容,我应该不需要重复加载才对啊?

不知道是不是我没说清楚问题,我使用 http://forum.cocos.com/t/cc-loader-loadbinary/39433/3 这个方案加载的二进制文件,以前在2.0以前运行正常,现在不正常了,现在通过cc.loader.loadRes(“xxxx”) 返回给我一个cc.Asset类型,以前是返回arraybuffer,看控制台二进制文件确实是加载过了,我就想知道如何通过返回这个cc.Asset获取加载的arraybuffer

cc.loader.loadRes(url, function (err, asset) {
    if (!err) {
        cc.loader.load(asset.nativeUrl, function (err, result) {
            // result is binary data
        })
    }
})

多谢多谢,jare说的意思其实我明白,我是觉得不应该重复加载才对,刚刚测试了一下,发现不会重复加载:grin:,是我想错了,多谢了

之后会提供一个接口用于获取这类引擎能识别的数据

请问,result得到的是string字符串,这个是啥原因?

同问,result不是正确的二进制 @panda

本人把之前的工程代码(cocos2d-x3.19)迁移到cocos creator(1.9)里面,发现cc.loarder.loardBinary()接口被弃用了,使用上述的loadRes(尝试使用load,发现返回的asset是一串字符串,没有nativeUrl子对象,我的理解是,应该是1.9的版本是返回字符串,2.0之后版本才返回cc.Asset,欢迎纠正)代替之后,返回的字符串非二进制内容,而是经过了unicode 解码的字符串流(由于007f~00FF没有对应的字符,所有默认解码成�),造成了二进制数据缺失。请问,这个是要怎么解决?
PS:本人的工程是用python工具从数据库导出二进制数据文件(行内所说的模板表),并且在工程运行初始化的时候解析二进制数据文件,所以我这边急需一个可用的本地二进制文件加载接口

result得到的是string,的确不是二进制。老大,现在这个问题解决了么···· @panda

广州天河游戏公司HR,公司目前因为业务扩张在招聘:
【Cocos2dx】急 4人,薪资15-25K(优秀另议);
上班地点:广州天河,大小周休息,福利优厚,您看您这边有意向吗?或者朋友在找这方面工作的也麻烦帮忙推荐一下,可以直接加我Q或发简历至247029917@qq.com,欢迎推荐介绍:grin:

正确的加载方式,去试试吧!
var url = cc.url.raw(“resource/xxx.bin”);
cc.loader.load({ url: url, type: “binary”, },callback);

感谢, 刚好需要