使用TexturePacker生成png和plist,在Cocos2dx中使用plist和png
本文转载:
http://blog.youkuaiyun.com/handz_cpp/article/details/16112683
http://blog.youkuaiyun.com/song_hui_xiang/article/details/9316195
TexturePacker这个词从字面来说就是Texture(纹理) + Packer(打包)。它是一款把若干资源图片拼接为一张大图的工具。
官方网址:http://www.codeandweb.com/texturepacker
手机游戏开发中,为了提高图片渲染性能,经常需要将小图片合并成一张大图进行渲染。如果手工来做的话就非常耗时。TexturePacker就是一款非常不错方便的处理工具。TexturePacker虽然非常优秀,但不是免费的。
使用TexturePacker最主要的好处是,我们做的游戏最终要运行在Android手机或者苹果手机上,而Android或者ios系统使用的是OpenGL ES来渲染。所以我们要针对OpenGL ES来进行优化。内存方面,OpenGL ES纹理要求宽和高都是2的n次幂的倍数。想一想,如果图片的宽为33,而高为65,那么图片加载到内存后的大小为多少?考虑到宽和高都是2的n次幂,所以加载到内存后的大小是64*128。所以我们可以考虑将小的图片拼成到的图片,然后加载。渲染速度方面,OpenGL ES要求切换的纹理少,所以将图片拼成大图片,这样就减少了纹理的切换。所以使用TexturePacker是很有必要的。
使用TexturePacker生成图片和plist文件
TexturePacker可以直接选定一个文件夹,将里面的小图片生成一个大图片,并输出plist文件的工具。使用该工具,合图就非常简单了。
下面是使用流程(截图):很简单的,只需要的注意以下几点就可以了。。。
第一部:点击Add Sprites按钮添加图片资源 如图:
第二部:图片资源导进来之后只需要做些简单设置设置 如下图
根据你的图片资源大小来选择合适的 Max size W/H
第三部:导出生成 plist 和 .pvr.ccz 文件 点击Publish按钮如图:
然后把 plist 和 .pvr.ccz 两个文件导入项目就OK啦!!!
在Cocos2dx中使用上述生成的图片和plist
CCSpriteFrameCache *cache=CCSpriteFrameCache::sharedSpriteFrameCache();
cache->addSpriteFramesWithFile("grossini_dance_all.plist","grossini_dance_all.png");
//数组长度初始化为4,根据动画的总帧数初始化
CCArray *splitAniframe = CCArray::createWithCapacity(4);
CCSpriteFrame *frame;
char *frameNameChar = new char[20];
for(int i = 1;i<= 4;i++)
{
//下面的名字为打包前的每张图片的名字,加载plist文件很方便的一点就是可以根据打包前的图片名字直接访问到该图片
sprintf(frameNameChar, "grossini_dance_%d.png",i);
frame = CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName(frameNameChar);
splitAniframe->addObject(frame);
}
//根据帧序列创建动画(第二个参数为每帧之间的间隔时长)
CCAnimation *splitAnimation=CCAnimation::createWithSpriteFrames(splitAniframe,0.2f);
//根据动画创建动画动作
CCAnimate *splitAnimate=CCAnimate::create(splitAnimation);
CCSprite *testSprite = CCSprite::create();
//让精灵执行该动画动作,并且是无限循环
testSprite->runAction(CCRepeatForever::create(splitAnimate));
testSprite->setPosition(ccp(200,200));
addChild(testSprite);