TexturePacker 自定义数据格式导出
- 自定义输出模板
-
- [exporter.xml 定义输出参数](#exporter.xml 定义输出参数)
- [template.plist 模板引擎](#template.plist 模板引擎)
- jerry_filter.qs
- [TexturePacker 设置](#TexturePacker 设置)
- 参考资料
自定义输出模板

exporter.xml 定义输出参数
F:\exporters-jerry\cocos2d-jerry\exporter.xml
xml
<?xml version="1.0" encoding="UTF-8"?>
<exporter version="1.0">
<name>cocos2d-jerry</name>
<displayName>cocos2d (Jerry Custom)</displayName>
<description>支持自定义帧前缀的 Cocos2d-x 导出器。</description>
<version>1.1</version>
<files>
<file>
<name>main</name>
<displayName>Data file</displayName>
<fileExtension>plist</fileExtension>
<description>Cocos2d-x plist file</description>
<template>template.plist</template>
<optional>false</optional>
</file>
</files>
<supportsTrimming>true</supportsTrimming>
<supportsRotation>true</supportsRotation>
<rotationDirection>cw</rotationDirection>
<supportsNPOT>true</supportsNPOT>
<supportsTrimSpriteNames>true</supportsTrimSpriteNames>
<defaults>
<extrude>0</extrude>
<shapePadding>2</shapePadding>
<borderPadding>2</borderPadding>
<trimMode>Trim</trimMode>
<sizeConstraints>AnySize</sizeConstraints>
</defaults>
<properties>
<property>
<name>framePrefix</name>
<displayName>Frame Prefix</displayName>
<description>在此输入帧前缀</description>
<type>string</type>
<default>img_在此输入帧前缀</default>
<isAdvanced>false</isAdvanced>
</property>
</properties>
</exporter>
template.plist 模板引擎
模板文件,用于生成最终的 plist
F:\exporters-jerry\cocos2d-jerry\template.plist
官方说参考 :https://docs.djangoproject.com/en/dev/ref/templates/language
xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">{% load jerry_filter %}
<dict>
<key>frames</key>
<dict>{% for sprite in sprites %}
<key>{{ exporterProperties.framePrefix|pathNormalize }}{{ sprite.fullName }}</key>
<dict>
<key>frame</key>
<string>{{ "{" }}{{ "{" }}{{sprite.frameRect.x}},{{sprite.frameRect.y}}{{ "}" }},{{ "{" }}{{sprite.frameRect.width}},{{sprite.frameRect.height}}{{ "}" }}{{ "}" }}</string>
<key>offset</key>
<string>{{ "{" }}{{sprite.cornerOffset.x}},{{sprite.cornerOffset.y}}{{ "}" }}</string>
<key>rotated</key>
{% if sprite.rotated %}<true/>{% else %}<false/>{% endif %}
<key>sourceColorRect</key>
<string>{{ "{" }}{{ "{" }}{{sprite.sourceRect.x}},{{sprite.sourceRect.y}}{{ "}" }},{{ "{" }}{{sprite.sourceRect.width}},{{sprite.sourceRect.height}}{{ "}" }}{{ "}" }}</string>
<key>sourceSize</key>
<string>{{ "{" }}{{sprite.untrimmedSize.width}},{{sprite.untrimmedSize.height}}{{ "}" }}</string>
</dict>{% endfor %}
</dict>
<key>metadata</key>
<dict>
<key>format</key>
<integer>2</integer>
<key>realTextureFileName</key>
<string>{{ texture.fullName }}</string>
<key>size</key>
<string>{{texture.size.width}},{{texture.size.height}}</string>
<key>smartupdate</key>
<string>{{ smartUpdateKey }}</string>
<key>textureFileName</key>
<string>{{ texture.fullName }}</string>
</dict>
</dict>
</plist>
jerry_filter.qs
过滤器 F:\exporters-jerry\cocos2d-jerry\grantlee\0.2\jerry_filter.qs
js
// 定义筛选函数
var PathNormalize = function(input) {
// 将输入转换为常规 JavaScript 字符串
var input = input.rawString();
// 过滤器必须返回字符串值
return input.replace(/\\/g, '/');
};
// 设置过滤器名称(在模板中这样使用:{{ sprite.trimmedName|pathNormalize }})
PathNormalize.filterName = "pathNormalize";
// 向模板系统注册过滤器
Library.addFilter("PathNormalize");
TexturePacker 设置
自定义数据模板做好后到这里设置

启动时选择一个(目前我只做了一个 cocos2d-jerry 在 F:\exporters-jerry 目录下可以创建多个自定义数据格式,每个对应一个子目录)

自定义属性
自定义帧前缀

输出效果
xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>frames</key>
<dict>
<key>res/custom/activity/huo_dong_da_ting/xin_qu_huo_dong/1.png</key>
<dict>
<key>frame</key>
<string>{{2,2},{320,135}}</string>
<key>offset</key>
<string>{0,0}</string>
<key>rotated</key>
<false/>
<key>sourceColorRect</key>
<string>{{0,0},{320,135}}</string>
<key>sourceSize</key>
<string>{320,135}</string>
</dict>
略。。。
</dict>
略。。。
</plist>