【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】事件派发系统
触发使用: EventTool.emit(“onClick”) 需要监听的地方,onload调用: EventTool.on(“onClick”, this.onClickEvent, this) /**事件派发*/class EventTool {protected static _instance: EventTool null;public static get Instance(): Eve…...
《探索鸿蒙Next上开发人工智能游戏应用的技术难点》
在科技飞速发展的当下,鸿蒙Next系统为应用开发带来了新的机遇与挑战,开发一款运行在鸿蒙Next上的人工智能游戏应用更是备受关注。以下是在开发过程中可能会遇到的一些技术难点: 鸿蒙Next系统适配性 多设备协同:鸿蒙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,搭建安装VSOMEIP环境并运行基础例子。 1. 安装基础环境 使用apt-get来安装基础环境,受网络影响可以分开多次安装。环境好的也可以一次性执行。 sudo apt-get install gcc g sudo apt-get install cmake sudo apt-get install lib…...
Git | git revert命令详解
关注:CodingTechWork 引言 Git 是一个强大的版本控制工具,广泛应用于现代软件开发中。它为开发人员提供了多种功能来管理代码、协作开发和版本控制。在 Git 中,有时我们需要撤销或回退某些提交,而git revert 是一个非常有用的命令…...
ASP.NET Core 中,Cookie 认证在集群环境下的应用
在 ASP.NET Core 中,Cookie 认证在集群环境下的应用通常会遇到一些挑战。主要的问题是 Cookie 存储在客户端的浏览器中,而认证信息(比如 Session 或身份令牌)通常是保存在 Cookie 中,多个应用实例需要共享这些 Cookie …...
Flyte工作流平台调研(五)——扩展集成
系列文章: Flyte工作流平台调研(一)——整体架构 Flyte工作流平台调研(二)——核心概念说明 Flyte工作流平台调研(三)——核心组件原理 Flyte工作流平台调研(四)——…...
【AUTOSAR 基础软件】软件组件的建立与使用(“代理”SWC)
基础软件往往需要建立一些“代理”SWC来完成一些驱动的抽象工作(Complex_Device_Driver_Sw或者Ecu_Abstraction_Sw等),或建立Application Sw Component来补齐基础软件需要提供的功能实现。当面对具体的项目时,基础软件开发人员还可…...
java通过ocr实现识别pdf中的文字
需求:识别pdf文件中的中文 根据github项目mymonstercat 改造,先将pdf文件转为png文件存于临时文件夹,然后通过RapidOcr转为文字,最后删除临时文件夹 1、引入依赖 <dependency><groupId>org.apache.pdfbox</groupId><artifactId&g…...
Git 命令代码管理详解
一、Git 初相识:版本控制的神器 在当今的软件开发领域,版本控制如同基石般重要,而 Git 无疑是其中最耀眼的明珠。它由 Linus Torvalds 在 2005 年创造,最初是为了更好地管理 Linux 内核源代码。随着时间的推移,Git 凭借…...
Docker的安装和使用
容器技术 容器与虚拟机的区别 虚拟机 (VM) VM包含完整的操作系统,并在虚拟化层之上运行多个操作系统实例。 VM需要更多的系统资源(CPU、内存、存储)来管理这些操作系统实例。 容器 (Container) 容器共享主机操作系统的内核,具…...
Flink系统知识讲解之:Flink内存管理详解
Flink系统知识讲解之:Flink内存管理详解 在现阶段,大部分开源的大数据计算引擎都是用Java或者是基于JVM的编程语言实现的,如Apache Hadoop、Apache Spark、Apache Drill、Apache Flink等。Java语言的好处是不用考虑底层,降低了程…...
使用JMeter模拟多IP发送请求!
你是否曾遇到过这样的场景:使用 JMeter 进行压力测试时,单一 IP 被服务器限流或者屏蔽?这时,如何让 JMeter 模拟多个 IP 发送请求,成功突破测试限制,成为测试工程师必须攻克的难题。今天,我们就…...
【Ubuntu与Linux操作系统:六、软件包管理】
第6章 软件包管理 6.1 Linux软件安装基础 Linux的软件包是以二进制或源码形式发布的程序集合,包含程序文件和元数据。软件包管理器是Linux系统的重要工具,用于安装、更新和卸载软件。 1. 常见的软件包管理器: DEB 系统(如Ubunt…...
【数据结构-堆】力扣1834. 单线程 CPU
给你一个二维数组 tasks ,用于表示 n 项从 0 到 n - 1 编号的任务。其中 tasks[i] [enqueueTimei, processingTimei] 意味着第 i 项任务将会于 enqueueTimei 时进入任务队列,需要 processingTimei 的时长完成执行。 现…...
【前端动效】原生js实现拖拽排课效果
目录 1. 效果展示 2. 效果分析 2.1 关键点 2.2 实现方法 3. 代码实现 3.1 html部分 3.2 css部分 3.3 js部分 3.4 完整代码 4. 总结 1. 效果展示 如图所示,页面左侧有一个包含不同课程(如语文、数学等)的列表,页面右侧…...
C#使用OpenTK绘制3D可拖动旋转图形三棱锥
接上篇,绘制着色矩形 C#使用OpenTK绘制一个着色矩形-CSDN博客 上一篇安装OpenTK.GLControl后,这里可以直接拖动控件GLControl 我们会发现GLControl继承于UserControl //// 摘要:// OpenGL-aware WinForms control. The WinForms designer will always call the default//…...
排序的本质、数据类型及算法选择
排序的本质、数据类型及算法选择 一、排序的本质二、排序的数据类型三、排序算法的选择依据 前两天老金写了篇 “十大排序简介”,有点意犹未尽,这一回老金想把排序连根拔起,从排序的本质说道说道。 一、排序的本质 从字面上理解,…...
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电量计模块实战全解析:从硬件对接到数据处理的完整解决方案 在智能电表、能耗监测和物联网设备开发中,精确测量电能消耗是核心需求之一。IM1281B作为一款高性价比的单相电能计量模块,以其Modbus通信协议和直接电能脉冲输出功能&#x…...
Alpamayo-R1-10B商业应用探索:车企研发提效与算法验证加速方案
Alpamayo-R1-10B商业应用探索:车企研发提效与算法验证加速方案 1. 项目概述 Alpamayo-R1-10B是NVIDIA推出的自动驾驶专用开源视觉-语言-动作(VLA)模型,作为新一代自动驾驶研发工具链的核心组件,正在改变车企的研发流程。这个100亿参数规模的…...
从零入门大模型应用开发:收藏这份学习清单,轻松转型高薪岗位!
文章指出当前AI应用开发社招要求已提升,不再满足于简单的API调用或Demo实现。文章警示三类人慎入AI开发社招,并强调能力复合化、工程深度和业务理解的重要性。作者分享了四年AI开发经验,建议深入原理、重构项目经验,并给出了量化解…...
GPEN老照片修复案例:增强前后对比,效果直观展示
GPEN老照片修复案例:增强前后对比,效果直观展示 1. 引言:老照片修复的痛点与解决方案 翻开泛黄的相册,那些承载着珍贵记忆的老照片往往因为年代久远而变得模糊、褪色甚至破损。传统的手工修复不仅耗时耗力,还需要专业…...
全套R分析代码,空间转录组 + scRNA-seq揭示阿尔茨海默病抗体药机制
🚀科研不掉发,快来这个地表最强的生信神仙网站:中国银河生信云平台👉 立即访问:https://usegalaxy.cn最佳Galaxy生信云平台教程:从入门到精通(图文版)转录组分析流程和工具大全&…...
告别环境配置噩梦:手把手教你用OpenVINO 2024.4 + VS2019部署PyTorch图像分类模型(附完整代码)
从PyTorch到生产环境:OpenVINO 2024.4全链路部署实战指南 当你的PyTorch模型在实验环境中表现优异,如何将它无缝迁移到实际应用场景?本文将带你跨越从研究到生产的鸿沟,使用Intel OpenVINO工具包2024.4版本,在Visual S…...
Mojo结构体直传Python内存视图:零序列化跨语言数据流实现(附GDB内存布局验证截图)
第一章:Mojo结构体直传Python内存视图:零序列化跨语言数据流实现(附GDB内存布局验证截图)Mojo 通过其底层 value 和 parameter 机制,允许结构体在不触发拷贝或序列化的情况下,直接暴露为 Python 的 memoryv…...
cool-admin(midway版)前端图标系统:高级实践
cool-admin(midway版)前端图标系统:高级实践 【免费下载链接】cool-admin-midway 🔥 cool-admin(midway版)一个很酷的后台权限管理框架,模块化、插件化、CRUD极速开发,永久开源免费,基于midway.js 3.x、typescript、ty…...
DeepSeekGEO生成式引擎优化技术方案
DeepSeekGEO生成式引擎优化技术方案技术支持:拓世网络技术开发工作室1 方案背景与技术范式转移随着生成式AI成为信息分发的主入口,用户获取信息的方式已从“搜索-点击”转变为“提问-答案”。据统计,超过60%的Z世代用户更倾向于通过AI助手获取…...
GameFramework——FileSystem篇
目录 一、快速入门 1.1 什么是文件系统模块? 1.2 基本使用步骤 1.2.1 创建文件系统 1.2.2 写入文件 1.2.3 读取文件 1.2.4 删除文件 1.2.5 加载已有文件系统 二、文件布局 2.1 HeaderData(文件头) 2.2 BlockData(块数据…...
