转载标明出处:http://blog.csdn.net/notbaron/article/details/38326893
上篇回顾
上篇中,蛤蟆学习了用Plist文件来创建动画,这样实现的代码量比正常的少了很多。但是我们当时使用的plist文件时复制于cocos2d-x源码中的。这次我们学习下怎么自己创建plist文件。
工具介绍
首先介绍下这次学习的主角TexturePacker,这个工具是一个德国人写的需要买激活码。蛤蟆这里用的是试用版的。工具官网http://www.codeandweb.com/texturepacker/.大家可以在这里进行下载最新的版本。
具体步骤
那么现在让我们一起来使用一下它吧。
我们需要下载一个工具TexturePacker工具,链接如下:
http://www.codeandweb.com/texturepacker/ ,下载安装完毕后,打开如下图 1 。
我们将\cocos2d-x-3.2\tests\cpp-tests\Resources\Images路径下的14张图片拖到TexturePacker工具里面如下图2 :
然后点击如下图 3 所示的红框部分,选择我们项目的Resources目录。然后点击Publish按钮,就会在Resource目录下创建一个Plist文件和一个 png文件。
就这么简单。
代码实现
bool HelloWorld::init() 函数中加入如下代码即可。
auto cache =SpriteFrameCache::getInstance();
cache->addSpriteFramesWithFile("test.plist");
auto grossini =Sprite::createWithSpriteFrameName("grossini_dance_01.png");
constintkNumberOfFrames = 15;
Vector<SpriteFrame*>frames;
for (int i =1; i < kNumberOfFrames; i++)
{
char szName[100] = {0};
sprintf(szName, "grossini_dance_%02d.png", i);
frames.pushBack(cache->getSpriteFrameByName(szName));
}
// play the animation
auto anim =Animation::createWithSpriteFrames(frames,0.1f);
auto action =Animate::create(anim);
grossini->setPosition(Vec2(visibleSize.width/2 + origin.x, visibleSize.height/2 +origin.y));
grossini->runAction(action);
this->addChild(grossini);
代码解释
auto cache =SpriteFrameCache::getInstance();//创建一个缓存实例
cache->addSpriteFramesWithFile("test.plist");//加载test.plist文件,这个文件就是我们使用TexturePacker创建的,同时还有一个文件叫走tets.png。此时在resource目录中,我们只需要test.plist,test.png这两个文件即可。
auto grossini =Sprite::createWithSpriteFrameName("grossini_dance_01.png");
//这个表示创建一个精灵(图片的名字可以直接使用之前的图片名字,即使现在resource中没有该文件也没关系,因为该图片能在test.png中找到)
constintkNumberOfFrames = 15; //这个表示定义一个常量,正式代码不要出现哦
Vector<SpriteFrame*>frames;//创建一个顺序容器
for (int i =1; i < kNumberOfFrames; i++)//这个忽略,不明白的小伙伴可以回帖,或看之前的笔记
{
char szName[100] = {0};//这个忽略,不明白的小伙伴可以回帖,或看之前的笔记
sprintf(szName, "grossini_dance_%02d.png", i); //这个忽略,不明白的小伙伴可以回帖,或看之前的笔记
frames.pushBack(cache->getSpriteFrameByName(szName));
//这个表示往容器里面放精灵图片
}
// play the animation
auto anim =Animation::createWithSpriteFrames(frames,0.1f);//创建一个动画
auto action =Animate::create(anim);//创建一个动画播放器
grossini->setPosition(Vec2(visibleSize.width/2 + origin.x, visibleSize.height/2 +origin.y));
//这个忽略,不明白的小伙伴可以回帖,或看之前的笔记
grossini->runAction(action); //这个忽略,不明白的小伙伴可以回帖,或看之前的笔记
this->addChild(grossini); //这个忽略,不明白的小伙伴可以回帖,或看之前的笔记
总结
通过本笔记,我们学会了最基础的TexturePacker使用,以及和cocos2d-x代码的结合。
这个最大好处是能节省很多的内存,应该原先很多的图片现在变成了一个。这里为什么不能像上篇一样直接使用plist中的动作呢?这是因为目前我们只做的plist文件中只是精灵帧的集合,蛤蟆也不清楚TexturePacfker是否支持打包帧动画。
晚上的时候到TexturePacker官网溜了一圈感觉很不错,蛤蟆决定有空好好去看一下,只是时间是个问题。不过,既然定了目标那就努力去看吧。