当前位置: 首页 > news >正文

【cocos creator】【ts】事件派发系统

触发使用:
EventTool.emit(“onClick”)
需要监听的地方,onload调用:
EventTool.on(“onClick”, this.onClickEvent, this)


/**事件派发*/class EventTool {protected static _instance: EventTool = null;public static get Instance(): EventTool {if (EventTool._instance == null) {EventTool._instance = new EventTool();}return EventTool._instance;}isValidNode(node) {return node && node.isValid;}/**添加事件监听  * @param {string} event 事件名  * @param {Function} handler 事件响应函数  * @param {object} scope 函数所在的对象*/on(event: any, handler: Function, scope: any) {if (typeof handler != "function") {console.error("没有事件响应函数!", event);return;}let id = scope.uuid || scope.__custom_id__;if (!id) {scope.__custom_id__ = "" + Date.now() + Math.random();id = scope.__custom_id__;}this[id] = this[id] == undefined ? [] : this[id];if (Array.isArray(this[id])) {this[id].push(event);} else {console.error("有一个跟当前脚本同名的事件!");return;}this[event] = this[event] ? this[event] : {};this[event][id] = { handler: handler, scope: scope, times: cc.macro.REPEAT_FOREVER };}onOnce(event, handler, scope) {this.on(event, handler, scope)let id = scope.uuid || scope.__custom_id__;this[event][id].times = 1}/*** 移除事件监听* @param scope * @param event event 为空则移除scope所有监听*/off(scope?: any, event?: any) {let id = scope.uuid || scope.__custom_id__;if (!id) {return;}if (event) {this[event] = this[event] ? this[event] : {};this[event][id] = null;delete this[event][id];return;}let events = this[id];if (Array.isArray(events)) {for (let i = 0; i < events.length; i++) {this[events[i]][id] = null;delete this[events[i]][id];}}this[id] = [];delete this[id];}/**发送事件  * 参数个数不限,第一个参数为事件名,其余为传递给响应函数的参数  * @param {string} event 事件名    * @param args {}传递给响应函数的参数集,可以为空 */emit<T>(event, ...args) {let onwers = this[event];// console.log("trigger event:" + event);if (onwers) {for (let key in onwers) {let data = onwers[key];if (--data.times <= 0) {delete onwers[key];}try {if (!data.scope || !data.scope.node || !data.handler) continue;data.handler.apply(data.scope, args);} catch (e) {// console.error(e)}}} else {// console.log(event + "事件还没有添加事件监听!");}}
};
export default EventTool.Instance

相关文章:

【cocos creator】【ts】事件派发系统

触发使用&#xff1a; EventTool.emit(“onClick”) 需要监听的地方&#xff0c;onload调用&#xff1a; EventTool.on(“onClick”, this.onClickEvent, this) /**事件派发*/class EventTool {protected static _instance: EventTool null;public static get Instance(): Eve…...

《探索鸿蒙Next上开发人工智能游戏应用的技术难点》

在科技飞速发展的当下&#xff0c;鸿蒙Next系统为应用开发带来了新的机遇与挑战&#xff0c;开发一款运行在鸿蒙Next上的人工智能游戏应用更是备受关注。以下是在开发过程中可能会遇到的一些技术难点&#xff1a; 鸿蒙Next系统适配性 多设备协同&#xff1a;鸿蒙Next的一大特色…...

CSS | CSS实现两栏布局(左边定宽 右边自适应,左右成比自适应)

目录 一、左边定宽 右边自适应 1.浮动 2.利用浮动margin 3.定位margin 4.flex布局 5.table 布局 二、左右成比自适应 1:1 1flex布局 table布局 1:2 flex布局 <div class"father"><div class"left">左边自适应</div><div class"r…...

acwing_3195_有趣的数

acwing_3195_有趣的数 // // Created by HUAWEI on 2024/11/17. // #include<iostream> #include<cstring> #include<algorithm>#define int long longusing namespace std;const int N 1000 50; const int MOD 1e9 7; int C[N][N]; //组合数signed mai…...

Liunx-搭建安装VSOMEIP环境教程 执行 运行VSOMEIP示例demo

本文安装环境为Liunx&#xff0c;搭建安装VSOMEIP环境并运行基础例子。 1. 安装基础环境 使用apt-get来安装基础环境&#xff0c;受网络影响可以分开多次安装。环境好的也可以一次性执行。 sudo apt-get install gcc g sudo apt-get install cmake sudo apt-get install lib…...

Git | git revert命令详解

关注&#xff1a;CodingTechWork 引言 Git 是一个强大的版本控制工具&#xff0c;广泛应用于现代软件开发中。它为开发人员提供了多种功能来管理代码、协作开发和版本控制。在 Git 中&#xff0c;有时我们需要撤销或回退某些提交&#xff0c;而git revert 是一个非常有用的命令…...

ASP.NET Core 中,Cookie 认证在集群环境下的应用

在 ASP.NET Core 中&#xff0c;Cookie 认证在集群环境下的应用通常会遇到一些挑战。主要的问题是 Cookie 存储在客户端的浏览器中&#xff0c;而认证信息&#xff08;比如 Session 或身份令牌&#xff09;通常是保存在 Cookie 中&#xff0c;多个应用实例需要共享这些 Cookie …...

Flyte工作流平台调研(五)——扩展集成

系列文章&#xff1a; Flyte工作流平台调研&#xff08;一&#xff09;——整体架构 Flyte工作流平台调研&#xff08;二&#xff09;——核心概念说明 Flyte工作流平台调研&#xff08;三&#xff09;——核心组件原理 Flyte工作流平台调研&#xff08;四&#xff09;——…...

【AUTOSAR 基础软件】软件组件的建立与使用(“代理”SWC)

基础软件往往需要建立一些“代理”SWC来完成一些驱动的抽象工作&#xff08;Complex_Device_Driver_Sw或者Ecu_Abstraction_Sw等&#xff09;&#xff0c;或建立Application Sw Component来补齐基础软件需要提供的功能实现。当面对具体的项目时&#xff0c;基础软件开发人员还可…...

java通过ocr实现识别pdf中的文字

需求&#xff1a;识别pdf文件中的中文 根据github项目mymonstercat 改造,先将pdf文件转为png文件存于临时文件夹&#xff0c;然后通过RapidOcr转为文字,最后删除临时文件夹 1、引入依赖 <dependency><groupId>org.apache.pdfbox</groupId><artifactId&g…...

Git 命令代码管理详解

一、Git 初相识&#xff1a;版本控制的神器 在当今的软件开发领域&#xff0c;版本控制如同基石般重要&#xff0c;而 Git 无疑是其中最耀眼的明珠。它由 Linus Torvalds 在 2005 年创造&#xff0c;最初是为了更好地管理 Linux 内核源代码。随着时间的推移&#xff0c;Git 凭借…...

Docker的安装和使用

容器技术 容器与虚拟机的区别 虚拟机 (VM) VM包含完整的操作系统&#xff0c;并在虚拟化层之上运行多个操作系统实例。 VM需要更多的系统资源&#xff08;CPU、内存、存储&#xff09;来管理这些操作系统实例。 容器 (Container) 容器共享主机操作系统的内核&#xff0c;具…...

Flink系统知识讲解之:Flink内存管理详解

Flink系统知识讲解之&#xff1a;Flink内存管理详解 在现阶段&#xff0c;大部分开源的大数据计算引擎都是用Java或者是基于JVM的编程语言实现的&#xff0c;如Apache Hadoop、Apache Spark、Apache Drill、Apache Flink等。Java语言的好处是不用考虑底层&#xff0c;降低了程…...

使用JMeter模拟多IP发送请求!

你是否曾遇到过这样的场景&#xff1a;使用 JMeter 进行压力测试时&#xff0c;单一 IP 被服务器限流或者屏蔽&#xff1f;这时&#xff0c;如何让 JMeter 模拟多个 IP 发送请求&#xff0c;成功突破测试限制&#xff0c;成为测试工程师必须攻克的难题。今天&#xff0c;我们就…...

【Ubuntu与Linux操作系统:六、软件包管理】

第6章 软件包管理 6.1 Linux软件安装基础 Linux的软件包是以二进制或源码形式发布的程序集合&#xff0c;包含程序文件和元数据。软件包管理器是Linux系统的重要工具&#xff0c;用于安装、更新和卸载软件。 1. 常见的软件包管理器&#xff1a; DEB 系统&#xff08;如Ubunt…...

【数据结构-堆】力扣1834. 单线程 CPU

给你一个二维数组 tasks &#xff0c;用于表示 n​​​​​​ 项从 0 到 n - 1 编号的任务。其中 tasks[i] [enqueueTimei, processingTimei] 意味着第 i​​​​​​​​​​ 项任务将会于 enqueueTimei 时进入任务队列&#xff0c;需要 processingTimei 的时长完成执行。 现…...

【前端动效】原生js实现拖拽排课效果

目录 1. 效果展示 2. 效果分析 2.1 关键点 2.2 实现方法 3. 代码实现 3.1 html部分 3.2 css部分 3.3 js部分 3.4 完整代码 4. 总结 1. 效果展示 如图所示&#xff0c;页面左侧有一个包含不同课程&#xff08;如语文、数学等&#xff09;的列表&#xff0c;页面右侧…...

C#使用OpenTK绘制3D可拖动旋转图形三棱锥

接上篇,绘制着色矩形 C#使用OpenTK绘制一个着色矩形-CSDN博客 上一篇安装OpenTK.GLControl后,这里可以直接拖动控件GLControl 我们会发现GLControl继承于UserControl //// 摘要:// OpenGL-aware WinForms control. The WinForms designer will always call the default//…...

排序的本质、数据类型及算法选择

排序的本质、数据类型及算法选择 一、排序的本质二、排序的数据类型三、排序算法的选择依据 前两天老金写了篇 “十大排序简介”&#xff0c;有点意犹未尽&#xff0c;这一回老金想把排序连根拔起&#xff0c;从排序的本质说道说道。 一、排序的本质 从字面上理解&#xff0c…...

Python的列表基础知识点(超详细流程)

目录 一、环境搭建 二、列表 2.1 详情 2.2 列表定义 2.3 列表长度 2.4 列表索引 2.5 切片索引 2.6 添加 2.7 插入 2.8 剔除 2.8.1 pop方法 2.8.2 del方法 2.9 任何数据类型 2.10 拼接 2.10.1 “” 2.10.2 “*” 2.11 逆序 ​编辑 2.12 计算出现次数 2.13 排序…...

IM1281B电量计模块避坑指南:从接线到数据解析的全流程实战

IM1281B电量计模块实战全解析&#xff1a;从硬件对接到数据处理的完整解决方案 在智能电表、能耗监测和物联网设备开发中&#xff0c;精确测量电能消耗是核心需求之一。IM1281B作为一款高性价比的单相电能计量模块&#xff0c;以其Modbus通信协议和直接电能脉冲输出功能&#x…...

Alpamayo-R1-10B商业应用探索:车企研发提效与算法验证加速方案

Alpamayo-R1-10B商业应用探索&#xff1a;车企研发提效与算法验证加速方案 1. 项目概述 Alpamayo-R1-10B是NVIDIA推出的自动驾驶专用开源视觉-语言-动作(VLA)模型&#xff0c;作为新一代自动驾驶研发工具链的核心组件&#xff0c;正在改变车企的研发流程。这个100亿参数规模的…...

从零入门大模型应用开发:收藏这份学习清单,轻松转型高薪岗位!

文章指出当前AI应用开发社招要求已提升&#xff0c;不再满足于简单的API调用或Demo实现。文章警示三类人慎入AI开发社招&#xff0c;并强调能力复合化、工程深度和业务理解的重要性。作者分享了四年AI开发经验&#xff0c;建议深入原理、重构项目经验&#xff0c;并给出了量化解…...

GPEN老照片修复案例:增强前后对比,效果直观展示

GPEN老照片修复案例&#xff1a;增强前后对比&#xff0c;效果直观展示 1. 引言&#xff1a;老照片修复的痛点与解决方案 翻开泛黄的相册&#xff0c;那些承载着珍贵记忆的老照片往往因为年代久远而变得模糊、褪色甚至破损。传统的手工修复不仅耗时耗力&#xff0c;还需要专业…...

全套R分析代码,空间转录组 + scRNA-seq揭示阿尔茨海默病抗体药机制

&#x1f680;科研不掉发&#xff0c;快来这个地表最强的生信神仙网站&#xff1a;中国银河生信云平台&#x1f449; 立即访问&#xff1a;https://usegalaxy.cn最佳Galaxy生信云平台教程&#xff1a;从入门到精通&#xff08;图文版&#xff09;转录组分析流程和工具大全&…...

告别环境配置噩梦:手把手教你用OpenVINO 2024.4 + VS2019部署PyTorch图像分类模型(附完整代码)

从PyTorch到生产环境&#xff1a;OpenVINO 2024.4全链路部署实战指南 当你的PyTorch模型在实验环境中表现优异&#xff0c;如何将它无缝迁移到实际应用场景&#xff1f;本文将带你跨越从研究到生产的鸿沟&#xff0c;使用Intel OpenVINO工具包2024.4版本&#xff0c;在Visual S…...

Mojo结构体直传Python内存视图:零序列化跨语言数据流实现(附GDB内存布局验证截图)

第一章&#xff1a;Mojo结构体直传Python内存视图&#xff1a;零序列化跨语言数据流实现&#xff08;附GDB内存布局验证截图&#xff09;Mojo 通过其底层 value 和 parameter 机制&#xff0c;允许结构体在不触发拷贝或序列化的情况下&#xff0c;直接暴露为 Python 的 memoryv…...

cool-admin(midway版)前端图标系统:高级实践

cool-admin(midway版)前端图标系统&#xff1a;高级实践 【免费下载链接】cool-admin-midway &#x1f525; cool-admin(midway版)一个很酷的后台权限管理框架&#xff0c;模块化、插件化、CRUD极速开发&#xff0c;永久开源免费&#xff0c;基于midway.js 3.x、typescript、ty…...

DeepSeekGEO生成式引擎优化技术方案

DeepSeekGEO生成式引擎优化技术方案技术支持&#xff1a;拓世网络技术开发工作室1 方案背景与技术范式转移随着生成式AI成为信息分发的主入口&#xff0c;用户获取信息的方式已从“搜索-点击”转变为“提问-答案”。据统计&#xff0c;超过60%的Z世代用户更倾向于通过AI助手获取…...

GameFramework——FileSystem篇

目录 一、快速入门 1.1 什么是文件系统模块&#xff1f; 1.2 基本使用步骤 1.2.1 创建文件系统 1.2.2 写入文件 1.2.3 读取文件 1.2.4 删除文件 1.2.5 加载已有文件系统 二、文件布局 2.1 HeaderData&#xff08;文件头&#xff09; 2.2 BlockData&#xff08;块数据…...