psd2ui
开始
npm install
node PSD2UI.js [psd文件夹(文件)路径] //默认运行 node --inspect PSD2UI.js [psd文件夹(文件)路径] //使用浏览器运行 node --inspect-brk PSD2UI.js [psd文件夹(文件)路径] //使用浏览器运行,断点调试
ps:
- 如需使用横、竖屏自动化适配功能时,需传入横、竖版 psd 对应文件夹路径;
- 传入单个 psd 文件路径时,只转换对应横(或竖)版游戏场景,另一版需开发者自行适配(现大部分 PL 需横、竖屏适配,此方案一般用于工具开发者,开发新功能时调试使用)。
API
流程
- 复制模板项目tempProject
- 从process.env.PLAYSMART_PATH获取
- 或 从项目中的tempProject获取
- 解析psd文件获取图层树以及存储图片资源到新项目
- psd.tree()获取图层树包含位置大小等信息。
- 递归遍历树获取需要存储的资源并存储到targetPackage.resources数组中
- 在遍历的同时解析图层和目录命名,对节点做特殊处理
- cta文件大小
- 指定存储路径到特定的资源文件夹
- start,game,end
- lang
- xlz
- 在节点中添加组件标识以在后续流程中挂载组件
- 遍历targetPackage.resources元素中的pixelData并存储资源
- png转jpg
- cta图片尺寸处理
- 压缩图片大小(待办)
- 合并图层(待办)
- 存储完成后返回图层树
- 在遍历的同时解析图层和目录命名,对节点做特殊处理
- 得到图层树之后,根据节点属性生成场景节点
- UIImage
- UIText
- Node
- 递归插入到对应的场景树的节点中去
- start(待办)
- gamePlay
- ending
- 写入场景文件实现修改
PSD2UI.js
TODO
- 组名为 xxx@merge 合并组内所有图层,导出单张图;
- psd.js没有提供这个功能
- 通过images库和psd图层的位置关系手动合并。
- 资源包体大小预估;
- 同名资源,导出最大那张;
- 旋转属性命名r:90;
- 导出图片缩放大小s:0.9;
- 图片重复平铺功能:
- 保留原高度,横向平铺;
- 保留原宽度,纵向平铺;
- 全屏重复平铺;
- 序列帧自动切图,添加组件;
- 资源压缩功能;
psd文件 -> xml树 -> layer树 -> 储存资源 -> layer树转换成node树(合并部分树)-> 树合成字符串写入文件
tempProject/ 为空白项目不要修改
输出项目位于output/
使用组件命名规则
- bg@jpg
- bg@fixedWide
- 同个图层使用多组特殊命名功能时,请使用中、英文分号 “
;
” 或 “;
” 分开。如:bg@jpg;fixedWide 或 bg@jpg;fixedWide - 所有@功能名称
不区分大小写
,可这么写:bg@jpg 或 bg@JPG;bg@fixedWide 或 bg@fixedwide
API
导出属性配置
调用转换PSD文件函数
/** PS所有图层配置 */let PsLayers = {} /** * 转换PSD文件 */ { console PsLayers = convert console console;}
获得当前图层配置:PsLayers
PlaySmart 场景描述文件state
data内的数据都要序列化
场景节点的data
除了以下属性之外,每一个属性都是数组,[序列化的序号,属性值]
生成
qc-core-debug.js 9520
/** * 序列化时所有支持的字段类型 */ SerializerAUTO = 0; SerializerINT = 1; SerializerINTS = 2; // 整数 SerializerNUMBER = 3; SerializerNUMBERS = 4; // 数字 SerializerBOOLEAN = 5; SerializerBOOLEANS = 6; // 布尔 SerializerSTRING = 7; SerializerSTRINGS = 8; // 字符串 SerializerMAPPING = 9; // 数值对,value为字符串 SerializerTEXTURE = 10; SerializerTEXTURES = 11; // 图集(贴图) SerializerAUDIO = 12; SerializerAUDIOS = 13; // 音效 SerializerCOLOR = 14; // 颜色 SerializerCOLORS = 15; // 颜色数组 SerializerPREFAB = 16; SerializerPREFABS = 17; // 预制 SerializerNODE = 18; SerializerNODES = 19; // 场景节点 SerializerSCRIPT = 20; SerializerSCRIPTS = 21; // 逻辑脚本 SerializerGEOM = 22; SerializerGEOMS = 23; // 几何体,例如:点、线、矩形、圆等 SerializerPOINT = 24; SerializerPOINTS = 25; // 点 SerializerRECTANGLE = 26; SerializerRECTANGLES = 27; // 矩形 SerializerCIRCLE = 28; SerializerCIRCLES = 29; // 圆 SerializerELLIPSE = 30; SerializerELLIPSES = 31; // 椭圆 SerializerFONT = 32; // 字体 SerializerFONTS = 33; SerializerFILTER = 34; SerializerFILTERS = 35; // 着色器 SerializerTEXTASSET = 36; // 文本资源 SerializerTEXTASSETS = 37; // 文本资源数组 SerializerEXCELASSET = 38; // Excel资源 SerializerEXCELASSETS = 39; // Excel资源数组 SerializerACTION = 40; // action SerializerACTIONMANAGER = 41; // action 管理器 SerializerANIMATOR = 42; // action 或 action管理器 SerializerANIMATORS = 43; // action 或 action管理器数组 /** * 打包一个Node节点 * context为打包上下文信息 */ Serializerprototype { if !contextdependences // 初始化依赖项 contextdependences = ; var meta = {}; if obgetMeta meta = ob; json = json || {}; for var k in meta // 逐个字段序列化 this; // 返回object(这里不要打成字符串,免得递归调用时多次序列化,影响效率) return class: obclass data: json __json: ob__json ; }; /** * 合并依赖资源(Node节点需要进一步调度,将所有孩子的依赖整合到根节点中) */ Serializerprototype { var list = {}; for var i in contextdependences var atlas = contextdependencesi; if !listatlasuuid listatlasuuid = atlas; return list; };