(学习笔记3)TexturePackerGUI的使用和角色动画的创建

来源:互联网 发布:java字符串字典排序 编辑:程序博客网 时间:2024/06/13 23:41

TexturePackerGUI的使用和角色动画的创建

在用Cocos2d-x开发游戏时,需要把几张图片合成一张图来节省空间,比如一组动画图:


这是一组爆炸效果图,在加载的时候需要一张一张加载,这样就会产生很多的精灵对象,为了解决这个问题,我们可以使用TexturePackerGUI来完成图片的合成。

首先下载TexturePackerGUI(http://www.codeandweb.com/texturepacker/download):

安装好后主界面:


主要的名词解释:

Data Format:导出什么引擎数据,默认cocos2d,下拉列表中有很多,基本常用的引擎都支持了

Data File :导出文件位置(后缀名.plist)

Texture Format:纹理格式,默认png

Image format:图片像素格式,默认RGBA8888...根据对图片质量的需求导出不同的格式

Dithering:抖动,默认NearestNeighbour,(如果图像上面有许许多多的“条条”和颜色梯度变化)将其修改成FloydSteinberg+Alpha;

Scale: 让你可以保存一个比原始图片尺寸要大一点、或者小一点的spritesheet。比如,如果你想在spritesheet中加载“@2x"的图片(也即为Retina-display设备或者ipad创建的)。但是你同时也想为不支持高清显示的iphone和touch制作spritesheet,这时候只需要设置scale为 1.0,同时勾选autoSD就可以了。也就是说,只需要美工提供高清显示的图片,用这个软件可以自己为你生成高清和普清的图片。

Algorithm TexturePacker:里面目前唯一支持的算法就是MaxRects,即按精灵尺寸大小排列,但是这个算法效果非常好,因此你不用管它。

Border/shape padding: 即在spritesheet里面,设置精灵与精灵之间的间隔。如果你在你的游戏当中看到精灵的旁边有一些“杂图”的时候,你就可以增加这个精灵之间的间隔。

Extrude: 精灵边界的重复像素个数. 这个与间隔是相对应的--如果你在你的精灵的边边上看到一些透明的小点点,你就可以通过把这个值设设置大一点。

Trim: 通过移除精灵四周的透明区域使之更好地放在spritesheet中去。不要担心,这些透明的区域仅仅是为了使spritesheet里面的精灵紧凑一点。--当你从cocos2d里面去读取这些精灵的时候,这些透明区域仍然在寻里。(因为,有些情况下,你可能需要这些信息来确定精灵的位置)

Shape outlines: 把这个选项打开,那么就能看到精灵的边边。这在调试的时候非常有用。

AddSprite:添加图片Add Folder:根据文件夹添加图片

Publish:导出资源文件(.plist和png)

软件的使用:



这里Algorithm TexturePacker:里面目前唯一支持的算法就是MaxRects,即按精灵尺寸大小排列,但是这个算法效果非常好,因此你不用管它。

MaxRects方法能够最大限度的节约资源。我们在这里选择Basic,按照一般的顺序排序,因为爆炸动画有一定的顺序。

如果按照MaxRects排序,结果如下:


然后点击:Publish,就可以导出.plist文件和.png文件了。


bool HelloWorld::init()

{

   bool bRet = false;

   do

    {

       CC_BREAK_IF(! CCLayer::init());

 

                  this->setTouchEnabled(true);

                  CCSizeWinSize=CCDirector::sharedDirector()->getWinSize();

                  //将图片加载到精灵帧缓存池中

                  CCSpriteFrameCache* frameCache=CCSpriteFrameCache::sharedSpriteFrameCache();

                  frameCache->addSpriteFramesWithFile("boom.plist","boom.png");

                  //通过原有的图片的名字来创建精灵,而且不需要提供在照片中的位置。

                  CCSprite*boom1=CCSprite::createWithSpriteFrameName("image20.png");

                  boom1->setPosition(ccp(200,200));

                  this->addChild(boom1);

       bRet = true;

    }while (0);

 

   return bRet;

}

 

这样就可以随便的在场景上显示资源图片了。

接下来我们来创建一组动画。

USING_NS_CC;

class HelloWorld : public cocos2d::CCLayer

{

public:

   // Here's a difference. Method 'init' in cocos2d-x returns bool, insteadof returning 'id' in cocos2d-iphone

   virtual bool init(); 

 

   // there's no 'id' in cpp, so we recommand to return the exactly classpointer

   static cocos2d::CCScene* scene();

   

   // a selector callback

   void menuCloseCallback(CCObject* pSender);

 

   // implement the "static node()" method manually

   CREATE_FUNC(HelloWorld);

private:

         //用打包前图片创建动画

 CCAnimate* createAnimation();

        

};

 

在init()函数中添加:

                  CCSprite*run=CCSprite::create("HelloWorld.png");

                  run->setPosition(ccp(300,200));

                  this->addChild(run);

                  run->runAction(createAnimation());//精灵直接执行动画

这样就可以看到爆炸效果了。