Flash中导出可在Cocos2d-x中使用的精灵表
1.打开fla文件,在库中选择要导出精灵表的元件,右键——生成Sprite表
2.选择数据格式为Cocos2D v2
3.导出文件如下:
plist文件
导出的文件可在程序里面直接使用,但有个问题,可以看到plist文件中动画帧的key是以“元件名称”+序号(前面补0)组成的,如果这样直接在程序里面使用的话,在创建动画
帧的时候需要判断序号的位数,并进行补0的操作,这样效率就不高了。
如果能让导出的plist文件中key字段的命名中序号不需要补0,这样在程序中使用就更方便了。这就需要修改flash中导出精灵表的action script脚本了。
修改导出文件命名规范
在Flash的安装目录下的这个路径:Adobe\Adobe Flash CS6\Common\Configuration\Sprite Sheet Plugins,就是存放导出精灵表相关的脚本。脚本的命名就是对应数据格式的。所以要修改的是cocos2dv2.plugin.jsfl
在函数frameExport中就是导出每一帧的处理,我先把这部分注释解除掉,再做一次导出操作,看看输出。
控制台输出如下:
==== frameExport
skill-1-0001 //frame.id
69
0
69
56
0
0
69
56
false
false
1 //frame.frameNumber
skill-1- //frame.symbolName
undefined
undefined
---- frameExport
在脚本中默认是使用frame.id作为动画帧key字段的值,但如下使用“frame.symbolName + frame.frameNumber”拼接的字符串作为值会更方便在程序里面使用。
所以将以下代码:
var s ='\t\t\t<key>' + frame.id + '</key>\n';
修改如下:
var s ='\t\t\t<key>' + frame.symbolName + frame.frameNumber + '</key>\n';
重新导出后的plist文件,key值的命名如下:
修改后的代码如下:
function getPluginInfo(lang)
{
// fl.trace("==== getPluginInfo");
// fl.trace(lang);
// fl.trace("---- getPluginInfo");
pluginInfo = new Object();
pluginInfo.id = "cocos2Dv2";
pluginInfo.name = "cocos2D v2";
pluginInfo.ext = "plist";
pluginInfo.encoding = "UTF8";
pluginInfo.capabilities = new Object();
pluginInfo.capabilities.canRotate = true;
pluginInfo.capabilities.canTrim = true;
pluginInfo.capabilities.premultipliedAlpha = false;
pluginInfo.capabilities.canShapePad = true;
pluginInfo.capabilities.canBorderPad = true;
pluginInfo.capabilities.canStackDuplicateFrames = true;
return pluginInfo;
}
function beginExport(meta)
{
// fl.trace("==== endExport");
// fl.trace(meta.app);
// fl.trace(meta.version);
// fl.trace(meta.image);
// fl.trace(meta.format);
// fl.trace(meta.size.w);
// fl.trace(meta.size.h);
// fl.trace(meta.scale);
// fl.trace("---- endExport");
var s = '
\n';
s += '\n';
s += '
\n';
s += '\t
\n';
s += '\t\t
frames
\n';
s += '\t\t
\n';
return s;
}
function frameExport(frame)
{
// fl.trace("==== frameExport");
// fl.trace(frame.id);
// fl.trace(frame.frame.x);
// fl.trace(frame.frame.y);
// fl.trace(frame.frame.w);
// fl.trace(frame.frame.h);
// fl.trace(frame.offsetInSource.x);
// fl.trace(frame.offsetInSource.y);
// fl.trace(frame.sourceSize.w);
// fl.trace(frame.sourceSize.h);
// fl.trace(frame.rotated);
// fl.trace(frame.trimmed);
// fl.trace(frame.frameNumber);
// fl.trace(frame.symbolName);
// fl.trace(frame.frameLabel);
// fl.trace(frame.lastFrameLabel);
// fl.trace("---- frameExport");
//var s ='\t\t\t
' + frame.id + '
\n';
//修改动画帧key字段的值为“文件名+序号”(不补0)
var s ='\t\t\t
' + frame.symbolName + frame.frameNumber + '
\n';
s += '\t\t\t
\n';
s += '\t\t\t\t
frame
\n';
//fl.trace("key----");
//fl.trace(s);
//fl.trace("----key");
var scrx = frame.sourceSize.w - frame.frame.w;
var scry = frame.sourceSize.h - frame.frame.h;
s += '\t\t\t\t
{{' + frame.frame.x + ',' + frame.frame.y + '},{' + frame.frame.w + ',' + frame.frame.h + '}}
\n';
s += '\t\t\t\t
offset
\n';
var srcofsx = 0 - frame.offsetInSource.x;
var srcofsy = 0 - frame.offsetInSource.y;
s += '\t\t\t\t
{' + srcofsx + ',' + srcofsy + '}
\n';
s += '\t\t\t\t
rotated
\n';
s += '\t\t\t\t<' + frame.rotated + '/>\n';
s += '\t\t\t\t
sourceColorRect
\n';
var scrx = frame.sourceSize.w - frame.frame.w;
var scry = frame.sourceSize.h - frame.frame.h;
s += '\t\t\t\t
{{' + scrx + ',' + scry + '},{' + frame.frame.w + ',' + frame.frame.h + '}}
\n';
s += '\t\t\t\t
sourceSize
\n';
s += '\t\t\t\t
{' + frame.frame.w + ',' + frame.frame.h + '}
\n';
s += '\t\t\t
\n';
return s;
}
function endExport(meta)
{
// fl.trace("==== endExport");
// fl.trace(meta.app);
// fl.trace(meta.version);
// fl.trace(meta.image);
// fl.trace(meta.format);
// fl.trace(meta.size.w);
// fl.trace(meta.size.h);
// fl.trace(meta.scale);
// fl.trace("---- endExport");
var s = '\t\t
\n';
s += '\t\t
metadata
\n';
s += '\t\t
\n';
s += '\t\t\t
format
\n';
s += '\t\t\t
2
\n';
s += '\t\t\t
realTextureFileName
\n';
s += '\t\t\t
' + meta.image + '
\n';
s += '\t\t\t
size
\n';
s += '\t\t\t
{' + meta.sheetWidth + ',' + meta.sheetHeight + '}
\n';
s += '\t\t\t
textureFileName
\n';
s += '\t\t\t
' + meta.image + '
\n';
s += '\t\t
\n';
s += '\t
\n';
s += '
\n';
return s;
}
测试工程svn地址(可用svn客户端checkout到本地,是一个Cocos Code IDE的工程):http://code.taobao.org/svn/flash_sprite_sheet_cocos2dx/trunk
运行效果: