怎么以二进制的方式动态读取resources里的资源?

  • Creator 版本: 3.8.4

  • 目标平台: pc web:edge/ iOS / Android / windows

使用 assetManager.loadAny 和 resources.load 读出来的是个Asset对象:
QQ图片20240826230655

从这个对象里无法获取原始的二进制数据,只有一个_file属性,是已经转成字符串的数据。
可以使用这个字符串通过TextEncoder将它encode成一个Uint8Array。
然而问题出现了,这个Uint8Array中的数据与原始文件中的二进制数据不一样。
我猜想是由于Asset对象的_file这个属性,自动转成utf8了,导致在使用TextEncoder进行encode时,数据发生了改变。
怎么才能得到正确的二进制数据呢。

代码如下:

static loadFile(filePath: string){

    if ( this.files[filePath] ){ return }

    this.files[filePath] = {}

    assetManager.loadAny({uuid: '23c06cde-ad6b-4ee6-9495-3f42d5477e48', }, (err, data: BufferAsset) => {//dir: 'db://assets/resources/' + filePath

        console.log(data)

    })

    resources.load(filePath, (err: any, res: Asset) => {

        if (err) {

            error(err.message || err);

            return;

        }

        let str = res._file

        let pos = 0

        if(str.substring(0, 7) == 'skyatz1' ){

            this.files[filePath].dataView = new DataView(this.encoder.encode(str).buffer)

            pos += 7

            this.files[filePath].num = this.files[filePath].dataView.getUint32(pos, true)

            this.files[filePath].frames = []

            this.files[filePath].data = []

        }

    })

}

有没有懂的大神,跪谢!

2赞

顶一下,大神们帮帮忙

const binaryMap = [’.svga’, ‘.zip’, ‘.bin’, ‘.db’, ‘.pda’];
const binaryDownloader = cc.assetManager.downloader[’_downloadArrayBuffer’];
binaryMap.forEach((extName) => cc.assetManager.downloader.register(extName, binaryDownloader));

找个加载前的路径去执行

1赞

解决了,感谢大神相助!之前搜到过你在另一个贴的回复,试了没成功,是我理解错了。再次感谢! :+1: :+1: :+1:

感谢大佬解决

有个简单的方式,试试在,loadxxx的接口里,加个 {ext: ‘.bin’}
例如:

cc.assetManager.loadRemote("https://xxx.svga", { ext: '.bin' }, (err, res) => {
     if (err) {
        return
      }
      // todo //res为BufferAsset类型
})