Laya资源加载小记

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];//兼容接口
```

资源加载基础流程 public function load(url:String, type:String = null, cache:Boolean = true, group:String = null, ignoreCache:Boolean = false):void 加载资源。加载错误会派发 Event.ERROR 事件,参数为错误信息。 Parameters url:String — 资源地址。 type:String (default = null) — (default = null)资源类型。可选值为:Loader.TEXT、Loader.JSON、Loader.XML、Loader.BUFFER、Loader.IMAGE、Loader.SOUND、Loader.ATLAS、Loader.FONT。如果为null,则根据文件后缀分析类型。 cache:Boolean (default = true) — (default = true)是否缓存数据。 group:String (default = null) — (default = null)分组名称。 ignoreCache:Boolean (default = false) — (default = false)是否忽略缓存,强制重新加载。

缓存url、type、cache等数据,供加载完成或者后续加载使用。

如果资源已经加载过,并且没有设置ignoreCache则直接出发COMPLETE事件,通知加载完成。

如果定制了加载方法,如Laya3D中注册的方法,则直接使用对应方法进行加载。

根据type选择对应加载方法加载资源,如果没有传type,则会根据资源后缀名确定类型。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpzssd.html