目录

LoaderManager

load 加载资源

clearRes 卸载资源


LoaderManager

Package laya.net
public class LoaderManager
Inheritance LoaderManager EventDispatcher Object

1、LoaderManager 类用于批量加载资源,此类是单例,不要手动实例化此类,通过 Laya.loader 访问。

2、全部队列加载完成,会派发 Event.COMPLETE 事件;如果队列中任意一个加载失败,会派发 Event.ERROR 事件,事件回调参数值为加载出错的资源地址。

3、LoaderManager 类提供了以下几种功能:

1)多线程(默认5个加载线程),可以通过 maxLoader 属性修改线程数量;

2)多优先级:有0-4共5个优先级,优先级高的优先加载。0最高,4最低;

3)重复过滤:自动过滤重复加载(不会有多个相同地址的资源同时加载)以及复用缓存资源,防止重复加载;

4)错误重试:资源加载失败后,会重试加载(以最低优先级插入加载队列),retryNum 设定加载失败后重试次数,retryDelay 设定加载重试的时间间隔。

Property(属性)
maxLoader : int = 5 ,最大下载线程,默认为5个
retryDelay : int = 0 ,延迟时间多久再进行错误重试,默认立即重试
retryNum : int = 1 ,加载出错后的重试次数,默认重试一次
Method(方法)

cacheRes(url:String, data:*):void ,缓存资源。

cancelLoadByUrl(url:String):void ,根据地址清理掉未加载的内容

cancelLoadByUrls(urls:Array):void ,根据地址集合清理掉未加载的内容

clearRes(url:String):void ,清理指定资源地址缓存。

clearResByGroup(group:String):void ,根据分组清理资源。

clearTextureRes(url:String):void

销毁Texture使用的图片资源,保留texture壳,如果下次渲染的时候,发现texture使用的图片资源不存在,则会自动恢复 相比clearRes,clearTextureRes只是清理texture里面使用的图片资源,并不销毁texture,再次使用到的时候会自动恢复图片资源 而clearRes会彻底销毁texture,导致不能再使用;clearTextureRes能确保立即销毁图片资源,并且不用担心销毁错误,clearRes则采用引用计数方式销毁 【注意】如果图片本身在自动合集里面(默认图片小于51212),内存是不能被销毁的,此图片被大图合集管理器管理

clearUnLoaded():void ,清理当前未完成的加载,所有未加载的内容全部停止加载。

create(url:*, complete:Handler = null, progress:Handler = null, type:String = null, constructParams:Array = null, propertyParams:Object = null, priority:int = 1, cache:Boolean = true):void

根据clas类型创建一个未初始化资源的对象,随后进行异步加载,资源加载完成后,初始化对象的资源,并通过此对象派发 Event.LOADED 事件,事件回调参数值为此对象本身。套嵌资源的子资源会保留资源路径"?"后的部分。 如果url为数组,返回true;否则返回指定的资源类对象,可以通过侦听此对象的 Event.LOADED 事件来判断资源是否已经加载完毕。 注意:cache参数只能对文件后缀为atlas的资源进行缓存控制,其他资源会忽略缓存,强制重新加载。

getRes(url:String):* ,获取指定资源地址的资源。

load(url:*, complete:Handler = null, progress:Handler = null, type:String = null, priority:int = 1, cache:Boolean = true, group:String = null, ignoreCache:Boolean = false, useWorkerLoader:Boolean = false):LoaderManager

加载资源。资源加载错误时,本对象会派发 Event.ERROR 事件,事件回调参数值为加载出错的资源地址。 因为返回值为 LoaderManager 对象本身,所以可以使用如下语法:loaderManager.load(...).load(...);

setGroup(url:String, group:String):void ,设置资源分组。

更多 API 参考官网:https://layaair.ldc.layabox.com/api2/Chinese/index.html?category=Core&class=laya.net.LoaderManager

load 加载资源

通常游戏开始的时候,都需要先加载必要的资源,如上所示这个简易版的实现代码如下:

//初始化引擎
Laya.init(1000, 500, Laya.WebGL);
/**显示性能统计信息 */
Laya.Stat.show(0, 0);
var label_info;const imgUrls = [];
imgUrls.push("http://tomcat.apache.org/res/images/tomcat.png");
imgUrls.push("http://www.apache.org/img/asf_logo.png");
imgUrls.push("https://cn.vuejs.org/images/logo.png?_sw-precache=cf23526f451784ff137f161b8fe18d5a");
imgUrls.push("http://img02.tuke88.com/preview_music/00/08/56/preview-5b835eaf13a9b9053.mp3");/**load 加载应用中将使用到的资源列表* 第1个参表示要加载的单个资源地址或资源信息数组,比如:简单数组:["a.png","b.png"]* 第2个参数加载结束回调* 第3个参数是加载进度回调,回调参数值为当前资源的加载进度信息(0-1),Handler 要反复回调,所以要设置为 false,否则执行一次就会自动删除的*/
Laya.loader.retryNum = 2;//加载出错后的重试次数,默认重试一次
Laya.loader.load(imgUrls,Laya.Handler.create(this, loadComplete),Laya.Handler.create(this, loadProgress, [], false));
showInfo();/** 资源加载完成时回调*/
function loadComplete(isSuccess) {console.log("资源加载完成...", isSuccess);label_info.removeSelf();/**加载完成后从父容器中删除标签 label_info */var sprite = new Laya.Sprite();sprite.graphics.drawTexture(Laya.loader.getRes(imgUrls[0]), 200);Laya.stage.addChild(sprite);
}/**资源加载过程中的进度回调* progress 取值 0-1 */
function loadProgress(progress) {console.log("当前加载资源:" + progress);label_info.text = (progress * 100) + "%";
}/**显示标签信息 */
function showInfo() {label_info = new Laya.Label();label_info.fontSize = 20;label_info.color = "#fff";label_info.pos(200, 50);Laya.stage.addChild(label_info);
}

clearRes 卸载资源

1、游戏运行时总会加载许多资源,这些资源在使用完成后应及时卸载,否则一直残留在内存中。

2、这是内存优化的常用操作之一,可以参考官网:https://ldc.layabox.com/doc/?nav=zh-js-3-2-1

/**
 * 清理指定资源地址缓存。
 * @param   url 资源地址。
 */
clearRes(url: string): void;

如上所示加载两张图片资源并在控制台打印加载进度,加载完成后,在舞台上显示第一张图片,当点击 Label 文本后,清理加载完成的所有资源,则缓存的所有资源无法再使用,正在显示的图片也消失了,实现代码如下:

//初始化引擎
Laya.init(1000, 500, Laya.WebGL);
/**显示性能统计信息 */
Laya.Stat.show(0, 0);
var label_info;/**Laya.loader.load 当资源加载相同时,并不会重复加载,所以数组的大小仍然为4,但实际资源只有两份*/
const imgUrls = [];
for (var i = 0; i < 2; i++) {imgUrls.push("http://tomcat.apache.org/res/images/tomcat.png");imgUrls.push("http://www.apache.org/img/asf_logo.png");
}/**load 加载应用中将使用到的资源列表* 第1个参表示要加载的单个资源地址或资源信息数组,比如:简单数组:["a.png","b.png"]* 第2个参数加载结束回调* 第3个参数是加载进度回调,回调参数值为当前资源的加载进度信息(0-1),Handler 要反复回调,所以要设置为 false,否则执行一次就会自动删除的* LoaderManager 会自动过滤重复加载(不会有多个相同地址的资源同时加载)以及复用缓存资源,防止重复加载*/
Laya.loader.retryNum = 2;//加载出错后的重试次数,默认重试一次
Laya.loader.load(imgUrls,Laya.Handler.create(this, loadComplete),Laya.Handler.create(this, loadProgress, [], false));
showInfo();/** 资源加载完成时回调*/
function loadComplete() {console.log("资源加载完成...", imgUrls.length);var sprite = new Laya.Sprite();sprite.graphics.loadImage(imgUrls[0], 200, 10);Laya.stage.addChild(sprite);label_info.on(Laya.Event.CLICK, this, function () {for (var i = 0, len = imgUrls.length; i < len; ++i) {var imgUrl = imgUrls[i];//清理前:资源存在并可以使用console.log("清理前:", Laya.loader.getRes(imgUrl));//clearRes:清理指定资源地址缓存Laya.loader.clearRes(imgUrl);//清理后:资源被卸载无法再使用,已经在使用的也会消失console.log("清理后", Laya.loader.getRes(imgUrl));}});
}/**显示标签信息 */
function showInfo() {label_info = new Laya.Label("0%");label_info.fontSize = 20;label_info.color = "#fff";label_info.pos(400, 50);Laya.stage.addChild(label_info);
}/**资源加载过程中的进度回调* progress 取值 0-1 */
function loadProgress(progress) {console.log("当前加载资源:" + progress);label_info.text = parseInt(progress * 100) + "%";
}

LayaAr 批量加载资源 LoaderManager相关推荐

  1. 三 Laya3D 加载资源 (场景/预设/模型网格/材质/动画文件/贴图/粒子)

    参考: 资源概述 一 常用资源类型 场景 .ls 预设 .lh 模型网格 .lm 材质 .lmat 动画文件 .lani 贴图  .jpg .png .ltc等 二  场景加载 下面加载XunLong ...

  2. 2021年大数据HBase(十五):HBase的Bulk Load批量加载操作

    全网最详细的大数据HBase文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 HBase的Bulk Load批量加载操作 一.Bulk L ...

  3. new File(String Path)加载资源问题

    2017-12-17   15:07:38  [原创-wx] 一.我们在用IO流加载资源的时候,创建文件资源 1 File file = New File("String Path" ...

  4. 关于unity 中使用AssetBundle加载资源,shader偶尔会丢失的问题解决办法

    问题描述: 因为项目中要进行热更新设计,所以用unity官方推荐的打包方式assetbundle进行打包,打包好了以后再电脑上运行正常,但是当发布到android上后发现偶尔场景背景会出现空白,多方查 ...

  5. 无法加载资源,因为“应用程序传输安全性”策略要求使用安全连接

    本文翻译自:The resource could not be loaded because the App Transport Security policy requires the use of ...

  6. 【Android 插件化】Hook 插件化框架 ( 从源码角度分析加载资源流程 | Hook 点选择 | 资源冲突解决方案 )

    Android 插件化系列文章目录 [Android 插件化]插件化简介 ( 组件化与插件化 ) [Android 插件化]插件化原理 ( JVM 内存数据 | 类加载流程 ) [Android 插件 ...

  7. ARM的批量加载/存储指令

    批量加载/存储指令格式: LDMXX|STMXX{条件符}{寻址模式}Rb{!},{寄存器列表} 其中XX表示IA/IB/DA/DB. LDMIA/STMIA    访问/存储后地址递增(Increm ...

  8. Unity—AssetBundle的打包及四种加载资源方式

    AssetBundle打包:脚本放在Editor文件夹内 具体代码如下: using UnityEditor; using System.IO;public class CreateAssetBund ...

  9. Oracle通过OCI批量加载需要注意的问题

    ORACLE调用接口(Oracle Call Interface简称OCI)提供了一组可对ORACLE数据库进行存取的接口子例程(函数),通过在第三代程序设计语言(如C语言)中进行调用可达到存取ORA ...

  10. Metal之MTLBuffer批量加载顶点数量较多的图形渲染

    渲染原理 本文是基于"Metal渲染绘制三角形"这样顶点较少图形基础之上的延伸, 在渲染三角形的时候, 顶点数据的存储使用的是数组,当顶点传递时通过setVertexBytes(_ ...

最新文章

  1. Linux 查看当前用户id和组id
  2. 解决ubuntu下无线网络不可用
  3. mysql建表必须使用主键吗
  4. 用win32控制台应用程序绘制一个小房子
  5. 基于神经网络的控制器设计与仿真
  6. boost::mpl模块实现arithmetic相关的测试程序
  7. 设计模式(三)--适配器模式
  8. swagger 修改dto注解_Swagger 详解
  9. 炸窝(Collections当中的addAll方法)
  10. DreamFactory - 第3章生成数据库支持的API
  11. Unity 3D游戏五:打飞碟
  12. win10卓越性能模式开启方法
  13. kotlin插件禁用导致的Android studio无法打开-mac
  14. 翻译如重构,期待您的单元测试
  15. 查看、管理和修饰数码照片的利器:Windows照片库
  16. 思科设备密码破解方法
  17. 软件测试常用术语总结
  18. 大三计算机保研er现在还能参加哪些竞赛?
  19. 照身帖、密钥,看古代人做实名认证有哪些招数?
  20. c语言程序设计数字电位器,X9C103数字电位器中文.pdf

热门文章

  1. RGBA模式与颜色索引模式的对比
  2. yii2 linkpager ajax,Yii2扩展 - LinkPager 带分页大小
  3. some any oracle,Oracle Any/Some运算符
  4. 拓端tecdat|二手闲置物品交易数据快照
  5. 拓端tecdat|R语言时间序列和ARIMA模型预测拖拉机销售的制造案例研究
  6. pyqt5程序的图标
  7. 图像分类系统之功能实现概要
  8. 使用windows远程桌面连接ubuntu
  9. 【论文笔记】Joint Cascade Face Detection and Alignment
  10. python实现将将输入的可约分数化简为不可约分数