一、关于TexturePacker

TexturePacker是一个游戏图片打包工具,通过它,我们可以方便的将多个帧图片合成一张大图,来提高性能,对于这点在手机平台的游戏显得尤为重要。更多的资料可以参考官网:http://www.codeandweb.com/texturepacker

二、简单的例子

首先我们找来三张小图,连起来就代表一个游戏人物的的行走动画:

然后打开,TexturePacker工具将它们依次拖入工具右侧的资源窗口,如下图:

然后在左侧的Data Format选择cocos2d,Data File选择一个路径保存文件,最后点击publish。这样在你之前选择的保存文件的路径下,可以找到两个文件,一个是合成的大图文件,一个是plist文件。在这里是hero.png和hero.plist

三、创建精灵动画

首先创建一个cocos2d-x的cpp工程,然后将上一步骤得到的两个文件都放入Resources目录下。然后创建一个场景:

HeroScene.h

#pragma once

#include "cocos2d.h"

using namespace cocos2d;

class HeroScene :public Layer{
public:
    static Scene* scene();
    virtual bool init();
    CREATE_FUNC(HeroScene);
};

HeroScene.cpp

#include "HeroScene.h"

Scene* HeroScene::scene(){
    auto scene = Scene::create();
    auto layer = HeroScene::create();
    scene->addChild(layer);
    return scene;

}

bool HeroScene::init(){
    if(!Layer::init()){
        return false;
    }

SpriteFrameCache* frameCache = SpriteFrameCache::getInstance();

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

Vector<SpriteFrame*> frameArray = Vector<SpriteFrame*>(3);

SpriteFrame* sfa = frameCache->getSpriteFrameByName("a.gif");
SpriteFrame* sfb = frameCache->getSpriteFrameByName("b.gif");
SpriteFrame* sfc = frameCache->getSpriteFrameByName("c.gif");

frameArray.pushBack(sfa);
frameArray.pushBack(sfb);
frameArray.pushBack(sfc);

Animation* animation = Animation::createWithSpriteFrames(frameArray);
animation->setDelayPerUnit(0.1f);
animation->setLoops(-1);
Animate* animate = Animate::create(animation);

Sprite* hero = Sprite::createWithSpriteFrameName("a.gif");
hero->setPosition(ccp(100,200));
hero->runAction(animate);

this->addChild(hero);
return true;

}

最后,主要是看这一句

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

这里就是之前通过TexturePacker打包的图片和数据文件,通过SpriteFrameCache类可以方便的加载它们到帧缓存中,并在后续方便的使用。最后运行看下效果:

总结

简单介绍了如何使用texturepacker并在cocos2d-x中创建精灵动画。

##文档信息