加载自定义的二进制文件为什么不成功?

resources.load(“texture/npc/500000001”, BufferAsset, (err, res: BufferAsset) => {
// err 报错的信息是 Bundle resources doesn’t contain texture/npc/500000001
})
查了下源代码:应该是url-transformer.ts中parse函数中的info没有查到,
info = config.getInfoWithPath(item.path, item.type); 这个info如果没有查到就会抛除上面的错误。
继续深入看了config中getInfoWithPath,问题出在js.isChildClassOf(assetInfo.ctor, type)代码这里,
返回的是false,按照isChildClassOf中的逻辑确实是该返回false,assetInfo.ctor是个Asset类,type是BufferAsset,js.isChildClassOf(assetInfo.ctor, type) 修改成 js.isChildClassOf( type,assetInfo.ctor) ????
有木有大佬遇到过这个问题。麻烦讲解一下。。

暂时解决这个问题,但是用到了一个未来可能删除的getter。看起来很丑。
resources.load(“texture/npc/500000001”, (err, res: BufferAsset) => {
if(res._nativeAsset instanceof ArrayBuffer) {
let content: any = {};
content.loadings = 0;
const data: Uint8Array = new Uint8Array(res._nativeAsset);
const buffer: ByteArray = new ByteArray(data);
const headFlag: string = buffer.string(LengthType.Uint16)
const kind: number = buffer.int32();
const type: number = buffer.uint8();
const len: number = buffer.int32();
console.log(headFlag);
console.log(kind);
console.log(type);
console.log(len);
let pos: number = buffer.pos;
}
})
因为Factory里面二进制文件种类就几种,我自己试着用了assetManager.factor.register注册了自己自定义的后缀二进制文件也没有作用,索性就把自己的二进制文件修改成引擎里有的.binary后缀.
在这之前原本用http加载也能成功只是需要先load一遍我需要的文件,然后再取出nativeUrl用http加载,这种方法肯定不好,两次加载代码极丑。索性也不轴了,先用现在的方法吧。
我想着最好是assetManager.factory.register能直接注册我的自定义后缀文件,然后再用上述代码返回BufferAsset就完美了, 代码也足够清晰。现在注册了自定义后缀的文件后_nativeAsset是一个字符串。
另外回调到我这个函数里的BufferAsset不知道为什么丢失了一些类的信息,BufferAsset里的buffer就没了,引擎底层难道创建的不是BufferAsset??? 现在也不想折腾了,以后有时间再搞吧。

1赞

这样就可以加载到了