Egret社区
项目中所有的资源比较多 估计有上万个资源  但是每次进入到应用中时只会用到几十个 资源太多导致 default.res.json文件特别大 加载时间很长 但是实际用到的资源又特别少 这种情况该怎么优化 大佬们求思路  default.res.json 这个文件可以在代码中动态的改变吗?
分享到 :
0 人收藏

9 个回复

倒序浏览
13596054529  登堂入室 | 2020-7-30 18:44:20
直接改default.res.json 创建一个组,用那些文件放到组里,然后加载组就行了
siwenjie  登堂入室 | 7 天前
在wing里点击default.res.json,添加资源组,一般分成3各组,preload,loading,common。
soul0521  初窥堂奥 | 7 天前
上万的资源?没有打图集吗
lucasgo24601  登堂入室 | 7 天前
default.res.json = {
    "A_Game" :  url_for_a_game/AGameDefault.json
    "B_Game" :  url_for_b_game/BGameDefault.json
           ...etc
}
wingProperties.json自己加入AGameDefault.json这样资源异动就可以自动修改AGameDefault.json
Main.ts:

let gameName:string =自己想办法获取游戏Name (A_Game or B_Game ..etc)
等待RES.loadConfig(gameName:string,自己串url)

以上瞎猜的方法,没实作过
a362775841  登堂入室 | 7 天前
不一定全部资源都放在resource的,可以新建一个文件夹,放其他资源,resource一般只放ui资源
wsjlwc2234  登堂入室 | 7 天前
我们项目市分模块的,分开了很多个.res.json
luoyefeihua  登堂入室 | 6 天前
在贴吧上问了这么多问题终于有大佬回复了 现在这个default.res.json文件是只要拖进去资源 不用添加资源组就会增加这个文件的大小 如果资源很多的话  如果一个很小的项目 模板式套用千篇一律的资源就会比较麻烦 一二三楼的方法都不能解决这个文件比较大的问题 四楼方法可以 但是我懒得创建那么多文件 五楼我这基本都是ui资源 还需要预加载  这个问题我修改源码解决了一下

luoyefeihua  登堂入室 | 6 天前

assetsmanamger.d.ts 里面增加
/**
     * 加载自定义的资源对象。
     * @param url 资源配置的url地址
     * @platform Web,Native
     * @language zh_CN
     */
    function addMyResource(data:Object): Promise<void>;

assetsmanamger.js 里面增加
声明方法
/**
        * 加载自定义对象。
        * @param data 资源对象
        * @platform Web,Native
        * @language zh_CN
        */
    function addMyResource(data) {
        return compatiblePromise(instance.addMyResource(data));
    }
    RES.addMyResource = addMyResource;

方法实体 是根据复制config修改的
/**
         * 方法必须在loadConfig之后调用
         * @method RES.addMyResource
         * @param data {object}
         */
        Resource.prototype.addMyResource = function (data) {
            var _this = this;
            var resource = { name: "default.res.json", url: "default.res.json", type: "legacyResourceConfig", root: 'resource/' };
            // var resource = RES.config.getResource("default.res.json");
            // console.log(resource);
            var resConfigData = RES.config.config;
            var root = resource.root;
            var fileSystem = resConfigData.fileSystem;
            if (!fileSystem) {
                fileSystem = {
                    fsData: {},
                    getFile: function (filename) {
                        return fsData[filename];
                    },
                    addFile: function (data) {
                        if (!data.type)
                            data.type = "";
                        if (root == undefined) {
                            data.root = "";
                        }
                        fsData[data.name] = data;
                    },
                    profile: function () {
                        console.log(fsData);
                    },
                    removeFile: function (filename) {
                        delete fsData[filename];
                    }
                };
                resConfigData.fileSystem = fileSystem;
            }
            var groups = resConfigData.groups;
            for (var _i = 0, _a = data.groups; _i < _a.length; _i++) {
                var g = _a[_i];
                if (g.keys == "") {
                    groups[g.name] = [];
                }
                else {
                    groups[g.name] = g.keys.split(",");
                }
            }
            var alias = resConfigData.alias;
            var fsData = fileSystem['fsData'];
            var _loop_1 = function (resource_1) {
                fsData[resource_1.name] = resource_1;
                fsData[resource_1.name].root = root;
                if (resource_1.subkeys) {
                    resource_1.subkeys.split(",").forEach(function (subkey) {
                        alias[subkey] = resource_1.name + "#" + subkey;
                        alias[resource_1.name + "." + subkey] = resource_1.name + "#" + subkey;
                    });
                    // ResourceConfig.
                }
            };
            for (var _b = 0, _c = data.resources; _b < _c.length; _b++) {
                var resource_1 = _c[_b];
                _loop_1(resource_1);
            }
            RES.host.save(resource, data);
            return data;
        };

Main.ts 中使用  这些UI文件不用拖到项目中去  而且可以实现预加载图片功能  url为图片文件的目录 该方法必须在 await RES.loadConfig("resource/default.res.json", "resource/");之后使用

let groupStrAry = []
let resData = { groups: [], resources: [] }
resData.resources.push({ url: "assets/TR1/test_b.png", type: "image", root: "resource/", name: "test_b_png" })
              
resData.resources.push({ url: "assets/TR1/test_j.json", type: "json", root: "resource/", name: "test_j_json" })
groupStrAry.push("test_b_png")
               
groupStrAry.push("test_j_json")

await RES.addMyResource(resData)//类似于把资源拖入到default.res.json文件中
RES.createGroup("imageRes", groupStrAry)//动态创建预加载资源组
await RES.loadGroup("imageRes");//预加载资源

由于是修改源码  我也没看太懂 大家有需要的可以试试  这实在是被逼的没办法了 建议官方增加 这个动态添加资源到 default.res.json 的功能
asurance  渐入佳境 | 昨天 10:06
default.res.json只是资源的配置,但是似乎没要求是全局唯一的吧,你可以尝试把它拆成几个小的***.res.json,通过RES.loadConfig动态加载不同的配置.(这些主要是猜测,没有经过实际的代码验证,我当前的项目虽然用到了不同的.res.json,但是每次只会用一份,不能证明我这猜测的正确性,如果你有空的,可以尝试一下)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|京网文[2014]0791-191号|京ICP证150115号|Egret社区 ( 京ICP备14025619号 )

Powered by Discuz! X3.4 © 2001-2019 Comsenz Inc.

返回顶部