目录

Handler

Handler.create 与 new Handler

编码示例


Handler

Package laya.utils
public class Handler
Inheritance Handler Object

1、Handler 是事件处理器类。这是优化内存的方式之一,可以参考《LayaAir 对象池 laya.utils.Pool》

2、推荐使用 Handler.create() 方法从对象池创建,减少对象创建消耗。创建的 Handler 对象不再使用后,可以使用 Handler.recover() 将其回收到对象池,回收后不要再使用此对象,否则会导致不可预料的错误。

3、注意:由于鼠标事件也用本对象池,不正确的回收及调用,可能会影响鼠标事件的执行。

4、开发过程中会经常使用 Handler 来完成异步回调。Laya.Handler.create 使用了内置对象池管理,因此在使用Handler对象时可使用 Laya.Handler.create 来创建回调处理器。以下代码使用 Laya.Handler.create 创建资源加载的回调处理器:

Laya.loader.load(urls, Laya.Handler.create(this, onAssetLoaded));

5、游戏中经常根据游戏逻辑和阶段分批加载资源,第一批资源加载完成,触发Laya.Handler.create()创建的complete事件回调方法后被对象池回收;当游戏进行到某个时候,需要加载第二批资源时,Laya.Handler.create()会首先在对象池中检索相同的回调方法处理器,如果找到就直接使用对象池中方法,从而节省了内存开销。

Method(方法)

Handler(caller:* = null, method:Function = null, args:Array = null, once:Boolean = false) ,根据指定的属性值,创建一个 Handler 类的实例。

clear():Handler ,清理对象引用。

create(caller:*, method:Function, args:Array = null, once:Boolean = true):Handler

[static] 从对象池内创建一个Handler,默认会执行一次并立即回收,如果不需要自动回收,设置once参数为false。

recover():void ,清理并回收到 Handler 对象池内。

更多API参见官网:https://layaair.ldc.layabox.com/api/?category=Core&class=laya.utils.Handler

Handler.create 与 new Handler

/**
 * 从对象池内创建一个Handler,默认会执行一次并立即回收,如果不需要自动回收,设置once参数为false。
 * @param   caller 执行域(this)。
 * @param   method 回调方法。
 * @param   args 携带的参数。
 * @param   once 是否只执行一次,如果为true,回调后执行recover()进行回收,默认为true。
 * @return  返回创建的handler实例。
 */
static create(caller: any, method: Function, args?: Array<any>, once?: boolean): Handler;

1、如果需要多次触发Handler返回的回调方法,那么就需要对 Laya.Hanlder.create() 方法中的 once 参数设置为false。或者用 new Laya.Handler() 的方式创建。

2、例如在游戏开始界面中加载资源,对加载资源的进度进行显示时:

Laya.loader.load(urls, Laya.Handler.create(this,onAssetLoaded), Laya.Handler.create(this, onLoading));//错误写法
Laya.loader.load(urls, Laya.Handler.create(this,onAssetLoaded), Laya.Handler.create(this,onLoading, null, false));//正确写法
Laya.loader.load(urls, Laya.Handler.create(this,onAssetLoaded), new Laya.Handler(this, onLoading));//正确写法

3、使用 Laya.Handler.create(this,onLoading) 返回的回调方法,是要处理progress加载进度事件,由于回调执行一次之后就被对象池回收了,所以progress加载进度事件只触发了一次就结束了,但实际上资源并未加载完成,还处于加载中,所以必须设置 once 参数设置为false,或者用 new Laya.Handler() 的方式创建。

/**
 * 根据指定的属性值,创建一个 <code>Handler</code> 类的实例。
 * @param   caller 执行域。
 * @param   method 处理函数。
 * @param   args 函数参数。
 * @param   once 是否只执行一次。
 */
Handler(caller?: any, method?: Function, args?: Array<any>, once?: boolean);

4、注意:new Handler() 是没有使用对象池的方式,Handler.create() 默认使用了对象池.。

编码示例

//初始化引擎
Laya.init(1000, 500, Laya.WebGL);
/**显示性能统计信息 */
Laya.Stat.show(0, 0);
var label_info;const imgUrls = [];
for (var i = 0; i < 10; i++) {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");imgUrls.push("https://spring.io/img/homepage/icon-your-app.svg");imgUrls.push("http://www.apache.org/images/SupportApache-small.png");imgUrls.push("https://avatar.csdn.net/6/D/4/3_wangmx1993328.jpg");imgUrls.push("https://official.layabox.com/public/img/LAYABOX_Logo.png");
}/**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) {label_info.text = parseInt(progress * 100) + "%";console.log("当前加载资源:" + progress);
}/**显示标签信息 */
function showInfo() {label_info = new Laya.Label("0%");label_info.fontSize = 20;label_info.color = "#fff";label_info.pos(200, 50);Laya.stage.addChild(label_info);
}

LayaAir 事件处理器 Handler相关推荐

  1. SAP CRM和Cloud for Customer中的Event handler(事件处理器)

    SAP CRM可以在开发工具中用右键直接创建一个新的事件处理器: 这些事件处理器实际上就是UI控制器(Controller)上具有特定接口类型的方法. C4C UI的event handler 在C4 ...

  2. 百万数据报表读取:步骤分析以及自定义事件处理器

    自定义处理器 package cn.learn.poi.entity.cn.learn.poi.handler;import cn.learn.poi.entity.PoiEntity; import ...

  3. ASP.NET Core Web API下事件驱动型架构的实现(二):事件处理器中对象生命周期的管理

    在ASP.NET Core Web API下事件驱动型架构的实现(一):一个简单的实现中,我介绍了事件驱动型架构的一种简单的实现,并演示了一个完整的事件派发.订阅和处理的流程.这种实现太简单了,百十行 ...

  4. JavaScript为事件处理器传递参数 (转)

    首先参考:javascript attachEvent和addEventListener 使用方法 attachEvent方法,为某一事件附加其它的处理事件.(不支持Mozilla系列) addEve ...

  5. 处理器 Handler 详解

    在前面的章节,解读Java NIO的IO事件类型时讲到,可供选择器监控的通道IO事件类型包括以下4种: ·可读:SelectionKey.OP_READ ·可写:SelectionKey.OP_WRI ...

  6. 为Delphi程序添加事件和事件处理器

    在Delphi中,事件实际上是专门化的属性,它是一个过程(procedure)的指针.要添加事件,首先应在所定义的类中说明一个用来指向事件过 程的指针,该指针的作用是当事件一旦发生,就通过这个指针执行 ...

  7. C#零基础入门04:打老鼠初级之枚举、重构、事件处理器

    一:为界面加入"开始"."暂停"."停止" 经过上节课程我们的交互的过程,我们的程序增加了用户友好度,同时也可以记录更为详尽的成绩了.但是我 ...

  8. 前端MVC Vue2学习总结(四)——条件渲染、列表渲染、事件处理器

    一.条件渲染 1.1.v-if 在字符串模板中,如 Handlebars ,我们得像这样写一个条件块: <!-- Handlebars 模板 --> {{#if ok}}<h1> ...

  9. office工作日志文件_风暴事件处理器–每个工作者的GC日志文件

    office工作日志文件 在过去的三个月中,我正在与一个新团队合作,为电信领域的大数据分析构建产品. Storm事件处理器是我们使用的主要框架之一,它确实很棒. 您可以阅读其官方文档中的更多详细信息( ...

  10. 风暴事件处理器–每个工作者的GC日志文件

    在过去的三个月中,我正在与一个新团队合作,为电信领域的大数据分析构建产品. Storm事件处理器是我们使用的主要框架之一,而且确实很棒. 您可以阅读其官方文档(已改进)中的更多详细信息. Storm使 ...

最新文章

  1. 综合使用union和limit区分结果并限制返回结果集的条数
  2. Oracle中的Union、Union All、Intersect、Minus 使用用法区别
  3. 容器部署不适合文件服务器,建议使用内置容器部署War文件与可执行jar
  4. 我要自学网python视频教程_人生苦短,请用Python!学习Python的四大理由
  5. Python嵌套列表解析式(又称列表推导式)写法剖析与应用举例
  6. php-5.6 安装部署整理
  7. 数据结构与算法笔记——用Go语言描述
  8. 人大金仓数据库Centos 7 部署
  9. 机房电脑怎么批量修改计算机名,批量设置IP地址和计算机名
  10. 计算机课怎么切屏,电脑怎么切屏 电脑如何切屏
  11. vue3.0性能优化点之静态标记(PatchFlag)
  12. dmp格式怎么转换_如何生成转储(dmp)文件--工具篇
  13. 字符格式(gbk utf8等)
  14. 清理linux日志的命令
  15. MTK6833 安卓智能核心板 / 5G安卓手机主板
  16. 『kuangbin带你飞』专题10:匹配问题
  17. 书写我的人生回忆录-这应该是给子女和父母最好的礼物
  18. Nginx相应原理及简单使用和配置
  19. 分享在培训机构的一些经历及几点建议
  20. python爬取网页源代码并存储到本地实例

热门文章

  1. 如何有效创建工作分解结构?
  2. 农民工兄弟学C#(4)
  3. 直推学习(transductive learning)
  4. 用jdbc操作mysql 实现注册功能_JDBC链接Mysql数据库---实现登陆注册功能
  5. unity 线程断点时卡机_Java使用JDI进行线上程序断点信息记录
  6. 拓端tecdat|R语言中实现广义相加模型GAM和普通最小二乘(OLS)回归
  7. 拓端tecdat|GARCH(1,1),MA以及历史模拟法的VaR比较
  8. 数据系统 需要的服务器配置,数据系统 需要的服务器配置
  9. clion opencv安装_Mac 下搭建 Clion + OpenCV4.x 的开发环境
  10. sql语句截取字符串