-
Creator 版本: 3.8.4
-
目标平台: pc web:edge/ iOS / Android / windows
使用 assetManager.loadAny 和 resources.load 读出来的是个Asset对象:

从这个对象里无法获取原始的二进制数据,只有一个_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 = []
}
})
}
有没有懂的大神,跪谢!