事件模块
目录
我们接上一篇【数据模块】,现在继续使用AI帮我们写一个【事件管理器】。
前言
事件管理器,主要用于我们事件的监听、派发和销毁。
我们对ccc 现有 EventTarget 类,进行了简单的封装,方便日后扩展。
小白必读:事件管理器的用处?
答:我认为事件管理器就是一个通知系统,方便我们跨场景通知事件的发生,也适用不同功能模块解耦,减少相互依赖。
一、新建EventMgr.ts
我们继续在Core分包目录下的Scripts\Managers目录新建EventMgr.ts
二、提问AI
注意:现在我们根据DataMgr.ts的风格,来写代码。
1、点击提问区的 + 号
2、选择DataMgr.ts
3、输入问题
根据DataMgr的风格,帮我们写一个事件管理器,实现:
1、事件的监听
2、事件的派发
3、事件的销毁
4、参考DataMgr单例方式,并导出
4、复制后粘贴到EventMgr.ts
三、优化修改
我们从上图中看到回调函数类型有错误,现在我们直接把错误提示发送给AI,让其解决。
错误:类型“Function”提供的内容与签名“(...args: any[]): void”不匹配。
四、测试
1、我们在AI提问区域选择EventMgr和GameEntry进行关联提问
2、使用AI生成测试代码,然后复制到GameEntry.ts。
3、返回编辑器自动刷新改动后,运行浏览器预览测试看看效果。
五、最终版本
import { EventTarget } from 'cc';
/**
* 事件管理器
* 用于事件的监听、派发和销毁
*/
class EventMgr {
private eventTarget: EventTarget;
// 私有构造函数,防止外部实例化
private constructor() {
this.eventTarget = new EventTarget();
}
/** 单例实例 */
public static readonly instance: EventMgr = new EventMgr();
/**
* 监听事件
* @param {string} event - 事件名称
* @param {(args: any[]) => void} callback - 回调函数
* @param {any} [target] - 回调函数的目标
*/
public on(event: string, callback: (args: any[]) => void, target?: any) {
this.eventTarget.on(event, callback, target);
}
/**
* 派发事件
* @param {string} event - 事件名称
* @param {any} [arg] - 事件参数
*/
public emit(event: string, arg?: any) {
this.eventTarget.emit(event, arg);
}
/**
* 销毁事件
* @param {string} event - 事件名称
* @param {(args: any[]) => void} callback - 回调函数
* @param {any} [target] - 回调函数的目标
*/
public off(event: string, callback: (args: any[]) => void, target?: any) {
this.eventTarget.off(event, callback, target);
}
}
/** 导出实例 */
export const eventMgr = EventMgr.instance;
六、总结
在使用AI时如果有现成的参考代码,我们可以在提问区 点击 + 号,选择现成的代码文件提供给AI进行参考学习。像本章一开始AI就能根据参考代码,基本完成我们的需求:
1、函数、变量、注释等风格都是参考DataMg.ts
2、单例创建和导出方式也和DataMg统一
3、测试代码也符合GameEntry.ts的方式
到本章相信你已经完全掌握了 Cursor AI 的基本使用方式,加油!
作者:ccs2d.com 创建时间:2024-09-27 08:12
最后编辑:ccs2d.com 更新时间:2024-10-06 09:43
最后编辑:ccs2d.com 更新时间:2024-10-06 09:43