起因
策划丢过来了一批特效,需要打包成Plist
解决
使用Node.js调用TexturePacker的命令进行打包
源码
把代码中的TexturePacker,需要打包的路径,以及输出路径替换成自己的就可以直接使用了
import fs from 'fs';
import path from 'path';
import { exec } from 'child_process';
// 你的 TexturePacker 安装路径
const texturePackerPath =
'D:\\Program Files (x86)\\CodeAndWeb\\TexturePacker\\bin\\TexturePacker.exe'; // 替换为你实际安装的路径
// 图片文件夹路径,替换成你需要打包的路径
const inputDir = path.resolve(
`/pathtoPackage/`,
'effect'
); // 输入目录
const outputDir = path.resolve('output', 'effect'); // 输出目录
let createdArr = [];
function readDirSync(dir) {
try {
const files = fs.readdirSync(dir); // 获取文件夹中的所有文件和子目录
files.forEach((file) => {
const filePath = path.join(dir, file);
const stats = fs.statSync(filePath); // 获取文件的详细信息
dir = dir.replace(/\\/g, '/');
let arr = dir.split('/');
let name = arr[arr.length - 1];
if (stats.isDirectory()) {
//console.log(`目录: ${filePath}`);
readDirSync(filePath); // 递归遍历子目录
} else {
//console.log(`文件: ${filePath}`);
if (!createdArr.includes(name)) {
createdArr.push(name);
packageTexture(dir, name);
}
}
});
} catch (error) {
console.error('读取目录出错:', error);
}
}
function packageTexture(inputDir, name) {
// 执行 TexturePacker 命令,打包图集
let filePath = path.join(outputDir, name);
const cmd = `"${texturePackerPath}" --format cocos2d --max-size 1024 --size-constraints AnySize --sheet "${filePath}.png" --data "${filePath}.plist" "${inputDir}"`;
// 上面的不行,可以试试下面的版本,不知道为什么我下面这个不行,但是官方例子是用下面的
//const cmd = `"${texturePackerPath}" --format cocos2d --max-size 1024 --size-constraints AnySize --sheet "${filePath}.png" --data "${filePath}.plist" "${inputDir}/*.png"`;
console.log(cmd);
exec(cmd, { cwd: inputDir }, (err, stdout, stderr) => {
if (err) {
console.error(`执行命令失败: ${err}`);
return;
}
if (stderr) {
console.error(`错误信息: ${stderr}`);
return;
}
console.log(`处理成功: ${stdout}`);
});
}
readDirSync(inputDir);