Laya.Loader负责资源的加载逻辑,被LoaderManager管理。
Laya支持多种类型资源加载,也支持自定义类型加载。不同类型的加载方式可能不同。
Laya.Loader缓存已经被加载过得资源,减少资源重复加载。
提供清理资源接口,由LoaderManager封装接口。
部分资源加载包含多步加载,如Atlas和Font都包含文本下载和图片下载。
注意:Laya.loader是LoaderManager的实例,是Laya对外的通用加载接口。Laya.Loader由LoaderManager统一管理,一般情况下,开发是不需要自己创建Loader实例。
内置类型Laya内部支持的文件类型有:
/** 文本类型,加载完成后返回文本。*/ public static const TEXT:String = "text"; /** JSON 类型,加载完成后返回json数据。*/ public static const JSON:String = "json"; /** XML 类型,加载完成后返回domXML。*/ public static const XML:String = "xml"; /** 二进制类型,加载完成后返回arraybuffer二进制数据。*/ public static const BUFFER:String = "arraybuffer"; /** 纹理类型,加载完成后返回Texture。*/ public static const IMAGE:String = "image"; /** 声音类型,加载完成后返回sound。*/ public static const SOUND:String = "sound"; /** 图集类型,加载完成后返回图集json信息(并创建图集内小图Texture)。*/ public static const ATLAS:String = "atlas"; /** 位图字体类型,加载完成后返回BitmapFont。*/ public static const FONT:String = "font"; /** TTF字体类型,加载完成后返回null。*/ public static const TTF:String = "ttf"; /**@private */ public static const PKM:String = "pkm";Laya3D扩展类型:
/**@private 层级文件资源标记。*/ private static const HIERARCHY:String = "SPRITE3DHIERARCHY"; /**@private 网格的原始资源标记。*/ private static const MESH:String = "MESH"; /**@private 材质的原始资源标记。*/ private static const MATERIAL:String = "MATERIAL"; /**@private PBR材质资源标记。*/ private static const PBRMATERIAL:String = "PBRMTL"; /**@private TextureCube原始资源标记。*/ private static const TEXTURECUBE:String = "TEXTURECUBE"; /**@private Terrain原始资源标记。*/ private static const TERRAIN:String = "TERRAIN"; 这几种类型通过扩展的方式,在Laya3D初始化时,注册了对应的加载函数。
Laya文件后缀与文件类型的映射:
```
//Laya内置类型
{"png": "image","jpg": "image","jpeg": "image",
"txt": "text",
"json": "json",
"xml": "xml",
"als": "atlas","atlas": "atlas",
"mp3": "sound", "ogg": "sound", "wav": "sound",
"part": "json",
"fnt": "font",
"pkm": "pkm",
"ttf": "ttf"};
//Laya3D扩展
//通过扩展LoaderManager.createMap添加对应类型的解析。只对LoaderManager.create方法有效。
createMap["lh"] = [Sprite3D, Laya3D.HIERARCHY];
createMap["ls"] = [Scene, Laya3D.HIERARCHY];
createMap["lm"] = [Mesh, Laya3D.MESH];
createMap["lmat"] = [StandardMaterial, Laya3D.MATERIAL];
createMap["lpbr"] = [PBRMaterial, Laya3D.MATERIAL];
createMap["ltc"] = [TextureCube, Laya3D.TEXTURECUBE];
createMap["jpg"] = [Texture2D, "nativeimage"];
createMap["jpeg"] = [Texture2D, "nativeimage"];
createMap["png"] = [Texture2D, "nativeimage"];
createMap["pkm"] = [Texture2D, Loader.BUFFER];
createMap["lsani"] = [AnimationTemplet, Loader.BUFFER];
createMap["lrani"] = [AnimationTemplet, Loader.BUFFER];
createMap["raw"] = [DataTexture2D, Loader.BUFFER];
createMap["mipmaps"] = [DataTexture2D, Loader.BUFFER];
createMap["thdata"] = [TerrainHeightData, Loader.BUFFER];
createMap["lt"] = [TerrainRes, Laya3D.TERRAIN];
createMap["lani"] = [AnimationClip, Loader.BUFFER];
createMap["lav"] = [Avatar, Loader.JSON];
createMap["ani"] = [AnimationTemplet, Loader.BUFFER];//兼容接口
```
缓存url、type、cache等数据,供加载完成或者后续加载使用。
如果资源已经加载过,并且没有设置ignoreCache则直接出发COMPLETE事件,通知加载完成。
如果定制了加载方法,如Laya3D中注册的方法,则直接使用对应方法进行加载。
根据type选择对应加载方法加载资源,如果没有传type,则会根据资源后缀名确定类型。