当前位置: 首页 > 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 排序…...

保姆级教程:用Python+Socket实现西门子CNC产量数据自动采集(附避坑指南)

PythonSocket实现西门子CNC产量数据自动化采集实战指南 在工业4.0时代&#xff0c;生产数据的实时采集与分析已成为智能制造的核心环节。对于使用西门子数控系统&#xff08;如828D、840DSL等&#xff09;的制造企业而言&#xff0c;如何绕过复杂的授权流程&#xff0c;通过编程…...

如何评估单网页SEO的ROI

如何评估单网页SEO的ROI 在当今的数字化时代&#xff0c;网站的成功与否往往取决于其搜索引擎优化&#xff08;SEO&#xff09;的效果。而在SEO的众多策略中&#xff0c;单网页SEO的ROI&#xff08;投资回报率&#xff09;评估尤为重要。了解如何评估单网页SEO的ROI&#xff0…...

C语言宏定义:嵌入式开发中的高效利器与避坑指南

1. C语言宏定义的基础与陷阱在嵌入式开发中&#xff0c;宏定义是C语言最强大的特性之一&#xff0c;但也是最容易踩坑的特性。让我们从一个简单的需求开始&#xff1a;如何用宏实现两个数的比较并返回较小值&#xff1f;初学者最常见的写法是这样的&#xff1a;#define MIN(a,b…...

AI绘画新玩法:图图的嗨丝造相-Z-Image-Turbo部署实战,轻松生成高质量渔网袜图片

AI绘画新玩法&#xff1a;图图的嗨丝造相-Z-Image-Turbo部署实战&#xff0c;轻松生成高质量渔网袜图片 1. 引言&#xff1a;解锁AI绘画的专属风格 你是否曾经遇到过这样的困扰&#xff1f;想要生成特定风格的图片&#xff0c;比如穿着精致渔网袜的人物形象&#xff0c;但使用…...

[Python3高阶编程] - 横跨同步异步的利器: asgiref.sync

一、asgiref.sync 是什么&#xff1f;asgiref.sync 是 ASGI&#xff08;Asynchronous Server Gateway Interface&#xff09;参考实现库 asgiref 中的核心子模块&#xff0c;主要用于安全地桥接同步代码与异步代码。&#x1f4cc; 一句话总结&#xff1a; 它让你在异步环境中调…...

OpenClaw开源贡献指南:Qwen3.5-9B技能模块PR提交流程

OpenClaw开源贡献指南&#xff1a;Qwen3.5-9B技能模块PR提交流程 1. 为什么需要你的贡献 去年冬天&#xff0c;当我第一次尝试用OpenClaw自动整理电脑上的照片时&#xff0c;发现现有的技能库缺少一个"智能相册整理"模块。那一刻我突然意识到&#xff1a;这个开源项…...

Phi-3-vision-128k-instruct Vue3前端集成实战:构建智能图像分析Web应用

Phi-3-vision-128k-instruct Vue3前端集成实战&#xff1a;构建智能图像分析Web应用 1. 引言&#xff1a;当Vue3遇见多模态AI 想象一下&#xff0c;你正在开发一个电商网站&#xff0c;需要让系统自动识别用户上传的商品图片并生成详细描述。传统方案要么依赖人工标注&#x…...

别再浪费手机性能了!Blackmagic Camera 搭配 LUT 滤镜包,解锁夜景和人物拍摄的隐藏技巧

Blackmagic Camera 与 LUT 滤镜包&#xff1a;解锁手机摄影的隐藏潜力 手机摄影早已不再是简单的记录工具&#xff0c;而是可以创作出专业级影像的利器。对于追求画质的摄影爱好者和小型工作室来说&#xff0c;Blackmagic Camera 这款专业级拍摄应用配合精心调校的 LUT 滤镜包&…...

Intv_AI_MK11 解决 403 Forbidden 错误:模型服务访问权限配置详解

Intv_AI_MK11 解决 403 Forbidden 错误&#xff1a;模型服务访问权限配置详解 1. 问题背景与解决思路 当你兴致勃勃地准备调用 Intv_AI_MK11 模型服务时&#xff0c;突然收到一个冷冰冰的 "403 Forbidden" 错误&#xff0c;这种体验就像拿着门票却被拦在演唱会门外…...

ai辅助部署openclaw:让快马智能适配ubuntu环境与反爬策略

AI辅助部署OpenClaw&#xff1a;让快马智能适配Ubuntu环境与反爬策略 最近在尝试用OpenClaw抓取一些动态加载的网站数据&#xff0c;发现直接部署基础版本根本行不通。目标网站不仅有动态渲染的内容&#xff0c;还设置了各种反爬机制。好在发现了InsCode(快马)平台的AI辅助开发…...