目录

  • 前言
  •       一、新建EventMgr.ts
  •       二、提问AI
  •       三、优化修改
  •       四、测试
  •       五、最终版本
  •       六、总结
  • 我们接上一篇【数据模块】,现在继续使用AI帮我们写一个【事件管理器】。

    前言

    事件管理器,主要用于我们事件的监听、派发和销毁。
    我们对ccc 现有 EventTarget 类,进行了简单的封装,方便日后扩展。

    小白必读:事件管理器的用处?
    :我认为事件管理器就是一个通知系统,方便我们跨场景通知事件的发生,也适用不同功能模块解耦,减少相互依赖。

    一、新建EventMgr.ts

    我们继续在Core分包目录下的Scripts\Managers目录新建EventMgr.ts
    新建EventMgr.ts

    二、提问AI

    注意:现在我们根据DataMgr.ts的风格,来写代码。
    1、点击提问区的 + 号
    2、选择DataMgr.ts
    3、输入问题

    根据DataMgr的风格,帮我们写一个事件管理器,实现:
    1、事件的监听
    2、事件的派发
    3、事件的销毁
    4、参考DataMgr单例方式,并导出

    4、复制后粘贴到EventMgr.ts
    提问1

    三、优化修改

    我们从上图中看到回调函数类型有错误,现在我们直接把错误提示发送给AI,让其解决。
    错误:类型“Function”提供的内容与签名“(...args: any[]): void”不匹配。
    优化修改

    四、测试

    1、我们在AI提问区域选择EventMgr和GameEntry进行关联提问
    2、使用AI生成测试代码,然后复制到GameEntry.ts。
    3、返回编辑器自动刷新改动后,运行浏览器预览测试看看效果。
    测试1
    测试2

    五、最终版本

    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
    上一篇:
    下一篇: