目录

  • 前言
  •       一、新建BundleMgr.ts
  •       二、提问AI
  •       三、优化修改
  •       四、最终版本
  •       五、总结
  • 我们接上一篇【任务模块】,现在继续使用AI帮我们写一个【分包管理器】。

    前言

    分包管理器,主要用于游戏分包的读取加载。
    我们对ccc现有的分包读取加载功能进行了简单封装,主要提供给资源管理器使用。

    小白必读:分包管理器的用处?
    :因为我们框架就是采用大厅+子游戏分包的模式,所以分包管理器是必要的。比如玩家登录我们就要使用分包管理器读取加载Login分包、进入大厅就要读取加载Hall分包、进入SubGame001的子游戏就要读取加载SubGame001的子游戏分包,用处也是非常广泛。

    一、新建BundleMgr.ts

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

    二、提问AI

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

    根据DataMgr的风格,用ccc 3.8.x 内置 API 帮我们写一个新建BundleMgr分包管理器,实现:
    1、获取分包
    2、加载分包
    3、参考DataMgr单例方式,并导出

    4、按下图步骤,用AI生成代码后复制粘贴到BundleMgr.ts
    提问AI

    三、优化修改

    从上图中我们看到,我们只需要改两个地方:
    1、使用 ccc 3.8.x 内置 的 assetManager.getBundle 代替 bundles变量
    2、如果getBundle中获取的分包未加载,则使用loadBundle加载

    优化修改1

    四、最终版本

     

    import { assetManager, AssetManager } from 'cc';
    
    /**
     * 分包管理器
     * 用于获取和加载分包
     */
    class BundleMgr {
        // 私有构造函数,防止外部实例化
        private constructor() {}
    
        /** 单例实例 */
        public static readonly instance: BundleMgr = new BundleMgr();
    
        /**
         * 获取分包
         * @param {string} bundleName - 分包名称
         * @param {Function} callback - 获取完成时的回调函数
         */
        public getBundle(bundleName: string, callback: (err: Error | null, bundle: AssetManager.Bundle | null) => void) {
            const bundle = assetManager.getBundle(bundleName);
            if (bundle) {
                callback(null, bundle);
            } else {
                this.loadBundle(bundleName, callback);
            }
        }
    
        /**
         * 加载分包
         * @param {string} bundleName - 分包名称
         * @param {Function} callback - 加载完成时的回调函数
         */
        private loadBundle(bundleName: string, callback: (err: Error | null, bundle: AssetManager.Bundle | null) => void) {
            assetManager.loadBundle(bundleName, (err, bundle) => {
                if (err) {
                    console.error(`加载分包失败: ${bundleName}`, err);
                    callback(err, null);
                    return;
                }
                callback(null, bundle);
            });
        }
    }
    
    /** 导出实例 */
    export const bundleMgr = BundleMgr.instance;

    五、总结

    代码很少基本一眼看完,这里我们就不做测试了。
    勤动手,易掌握,相信对于AI的使用,大家应该越来越熟练了吧!!!

    作者:ccs2d.com  创建时间:2024-09-28 11:59
    最后编辑:ccs2d.com  更新时间:2024-10-06 09:43
    上一篇:
    下一篇: