转自: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