当loadDir不指定资源类型加载后,通过getDirWithPath获取出来的的路径,uuid对应N个资源路径,这个资源路径是有可能不带后缀导致重名,但是如果用资源路径做key获取某个资源时就难以区分。如果自行给这个路径添加后缀,也就是通过资源类型cc.SpriteAtlas cc.SpriteFrame sp.SkeletonData 这类的资源类型收集.name来获取后缀名的话就有个问题,web端正常,但是模拟器等native环境获取出来的却是统一的cc.Assets的类型,也就是获取出来会变成cc_Assets,而不是cc_SpriteAtlas cc_SpriteFrame …
这样就导致没法区分资源了,综上所述如果不用uuid作为key,目录加载情况下,如何通过资源路径获取准确要用的资源呢?
getDirWithPath可以拿到目录下的每个assetInfo 里面包含path资源路径和ctor资源类型的构造函数 就像你说的拿资源路径做key无法区分不同后缀的同名资源 所以必须结合资源类型来区分后缀
如果拿ctor.name来区分会有个问题 构建后类名会被混淆 原来能够获得cc_SpriteFrame sp_SkeletonData的构建后只能得到CCClass 这个问题很简单 直接使用cc.js.getClassName(ctor)就能拿到原始类名
ps: 其实直接拿ctor来做判断就好了 if(ctor === cc.SpriteFrame)
另外资源类型也只是导入ccc后的asset资源类型 并不和文件类型等同 还需要根据asset._native来辅助判断 这个值是文件的ext也就是文件后缀名 只不过有些时候只能拿到’'我也不知道为什么
是的 我就是用ctor == cc.SpriteFrame来做的 不过你说的cc.js.getClassName(ctor)我还真不知道 如果这样可以其实会更方便