egret 通过gulp 修改default.res.json资源分组

转自:https://www.pianshen.com/article/328588304/
转到egret,第一步想搞的就是他的资源分组,我是懒人,不想什么鬼都要自己手动去拖!
哦,对了,ui方面我比较喜欢使用fairygui,习惯每个功能模块对应一个包资源,所以在egret里面我把一个文件夹定义为一个组,组名就是文件夹的名字(不要文件夹里面内嵌文件夹,我没这个需求,所以不知道内嵌会出现什么情况,也没去试验过,嘿嘿)
当然,也可以指定这个文件夹为预加载的组,可以在下面的context.res.preload把文件夹的路径放进去,这样的话,这个文件夹就不会成为一个组,而里面所有资源都会存在preload组里面。

另外gulp 这东西我就不介绍了,想了解的自己了解,网络很多文章介绍

创建gulpflie.js并且将下面的代码粘贴过去
var gulp = require('gulp'); var fs = require("fs");

var context = {
    "gulp": gulp,
    "fs": fs,
     "in": {
      "resPath": "resource/"
      },
      "out": {
        "resPath": "resource/"
      },
      "res": {
        "ignore": ["default.res.json"],//忽略的文件,包括扩展名 
        "name": "default.res",
        "preload": [],//需要预加载包, 需要resource下面的完整路径
        "image": ["png", "jpeg", "bmp", "jpg"],
        "bin": ["fui"],
        "json": ["json"],
        "text": ["txt"],
        "sound": ["mp3"],
        "font": ["ttf"]
    	}
    }

ok 接着创建一个res.js (位置自己放,只要能拿到就行)
继续在gulpflie.js 加上任务gulp.task("res", require("./gulps/res.js")(context));
这里./gulps/res.js要换成你自己res.js的路径

贴上res.js 代码,同样粘贴

module.exports = function (context) {
    var fs = context["fs"];
    var res = context["res"];
    return function () {
        var resJson = {};
        resJson["groups"] = [];
        resJson["resources"] = [];

        var resPath = context["in"]["resPath"];
        var fileNames = fs.readdirSync(resPath);
        for (var filename of fileNames) {
            if (res["ignore"].indexOf(filename) >= 0) continue;
            if (fs.statSync(`${resPath}${filename}`).isFile()) {
                let name = getName(filename);
                let index = getGroupIndexByName(resJson["groups"], "preload");
                if (index == -1) {
                    var group = {};
                    group["keys"] = name;
                    group["name"] = "preload";
                    resJson["groups"].push(group);
                } else {
                    resJson["groups"][index]["keys"] += "," + name;
                }

                let resources = {};
                let type = getType(filename);
                resources["url"] = filename;
                resources["type"] = type;
                resources["name"] = name;
                resJson["resources"].push(resources);
            } else {
                searchRes(resJson["groups"], resJson["resources"], resPath, filename)
            }
        }
        fs.writeFileSync(`${context["out"]["resPath"]}${res["name"]}.json`, JSON.stringify(resJson, null, 4));//JSON.stringify(assets, null, 4)
    }
    function searchRes(groups, ress, path, dir) {
        var fileNames = fs.readdirSync(`${path}${dir}/`);
        for (var filename of fileNames) {
            if (res["ignore"].indexOf(filename) >= 0) continue;
            if (fs.statSync(`${path}${dir}/${filename}`).isFile()) {
                let name = getName(filename);
                let preloads = res["preload"];
                let loadName;
                if (preloads.indexOf(dir) >= 0) {
                    loadName = "preload";
                } else {
                    let lastIndex = dir.lastIndexOf('/');
                    if (lastIndex >= 0) {
                        loadName = dir.substring(lastIndex+1);
                    }else {
                        loadName = dir;
                    }
                }
                let index = getGroupIndexByName(groups, loadName);
                if (index == -1) {
                    var group = {};
                    group["keys"] = name;
                    group["name"] = loadName;
                    groups.push(group);
                } else {
                    groups[index]["keys"] += "," + name;
                }

                let resources = {};
                let type = getType(filename);
                resources["url"] = `${dir}/${filename}`;
                resources["type"] = type;
                resources["name"] = name;
                ress.push(resources);

            } else {
                searchRes(groups, ress, path, `${dir}/${filename}`);
            }
        }
    }

    function getGroupIndexByName(groups, name) {
        index = 0;
        for (var group of groups) {
            if (group.name == name) {
                return index;
            }
            index++;
        }
        return -1;
    }
    function getName(filename) {
        let index = filename.indexOf(".");
        let name1;
        let name2;
        if (index >= 0) {
            name1 = filename.substring(0, index);
            name2 = filename.substring(index + 1);
        } else {
            console.log("没有扩展名");
            return;
        }
        return name1 + "_" + name2;
    }
    function getType(filename) {
        let index = filename.indexOf(".");
        let name1;
        let name2;
        if (index >= 0) {
            name1 = filename.substring(0, index);
            name2 = filename.substring(index + 1);
        } else {
            console.log("没有扩展名");
            return;
        }

        let type;
        let images = res["image"];
        index = images.indexOf(name2);
        if (index >= 0) {
            type = "image";
            return type;
        }
        index = res["bin"].indexOf(name2);
        if (index >= 0) {
            type = "bin";
            return type;
        }
        index = res["json"].indexOf(name2);
        if (index >= 0) {
            type = "json";
            return type;
        }
        index = res["text"].indexOf(name2);
        if (index >= 0) {
            type = "text";
            return type;
        }
        index = res["sound"].indexOf(name2);
        if (index >= 0) {
            type = "sound";
            return type;
        }
        index = res["font"].indexOf(name2);
        if (index >= 0) {
            type = "font";
            return type;
        }
    }
}

  • 执行gulp res
     
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值