egret项目,通过gulp,根据输入资源类型,按文件夹名称作为group名称,自动生成xxx.res.json文件

可紊 提交于 2020-10-12 04:55:52

 

gulpfile.js

var gulp = require('gulp'); 
var fs = require("fs");

//type 角色0,动画1
var type=1;
var resPath,dirPath,resName;
function SetTypePath(n)
{
	switch(n)
	{
		//角色
		case 0:
			resPath="../resource/Arts/Animals/xxxA/";
			dirPath="Arts/Animals/xxxA";
			resName="xxxA.res";
		break;
		//骰子
		case 1:
			resPath="../resource/Arts/Animals/xxxB/";
			dirPath="Arts/Animals/xxxB";
			resName="xxxB.res";
		break;
	}
}
SetTypePath(1);
var context = {
    "gulp": gulp,
    "fs": fs,
     "in": {
		"resPath": resPath,
		"dirPath": dirPath
      },
      "out": {
        "resPath": "../resource/",
		"dirPath": dirPath
      },
      "res": {
        "ignore": ["default.res.json"],//忽略的文件,包括扩展名 
        "name": resName,
        "preload": [],//需要预加载包, 需要resource下面的完整路径
        "image": ["png", "jpeg", "bmp", "jpg"],
        "bin": ["fui"],
        "json": ["json"],
        "text": ["txt"],
        "sound": ["mp3"],
        "font": ["ttf"]
    	}
    }
	
gulp.task("res", require("./res.js")(context));	

res.json

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, context["in"]["dirPath"])
            }
        }
        fs.writeFileSync(`${context["out"]["resPath"]}${res["name"]}.json`, JSON.stringify(resJson, null, 4));//JSON.stringify(assets, null, 4)
    }
    function searchRes(groups, ress, path, dir,dirPath) {
        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"] = `${dirPath}/${dir}/${filename}`;
                resources["type"] = type;
                resources["name"] = name;
                ress.push(resources);

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

    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;
        }
    }
}

SetResType.py

import re
import sys
path = "E:/SvnProjects/xxx/xxx/gulps/gulpfile.js"
#修改gulpfile.js文件,设置资源类型
def updatefiles(type):
	f = open(path,'r',encoding='utf-8')
	alllines=f.readlines()
	f.close()

	ff = open(path,'w',encoding='utf-8')
	for line in alllines:
		if re.search('var type=', line):
			ff.write('var type='+str(type)+';'+'\n')
		else:
			ff.write(line)
	ff.close()

def openFile(type):
    print('type', type)
    if type == '0':
        print('修改中...')
        updatefiles(0)

    elif type == '1':
        print('修改中...')
        updatefiles(1)
    else:
        print('输入错误')

type = input('\n选择资源类型: 0.角色  1.动画 \n')
if type != '4':
    openFile(type)
else:
    for i in range(0,1):
        openFile(str(i))

print('finished!')

更新xxx.res.json资源文件.bat
 

python E:\SvnProjects\xxx\xxx\gulps\SetResType.py
gulp res
pause


 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!