Flash中导出在Cocos2d-x中使用的精灵表

本文介绍了如何在Flash中导出适用于Cocos2d-x的精灵表,并通过修改导出文件的命名规范,提高程序中创建动画帧的效率。通过调整Action Script脚本,将导出的.plist文件的key字段从'元件名称+补零序号'改为'元件名称+无补零序号',简化了在Cocos2d-x项目中的使用方式。
摘要由CSDN通过智能技术生成


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


运行效果:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值