游戏进行过程中通常需要加载多张图片。如果每次只加载一张,则需要加载多次,那么这样就需要很长的时间和比较多的内存。如果我们把需要加载的多张图片整合到一张图片,则需要加载一次,那么这样仅花费一次的时间。而且内存是一次分配不是多次分散分配,没有内存碎片,那么内存的使用也比较高效。
通过以上的分析,我们很有必要把多张图片整合到一张图片中。TexturePacker就是这样的一个工具。Texturepacker工具的每个设置项都给出了相应的提示信息,使用起来非常简单,打包过后你会得到两个文件,其中一个是plist文件,它是图片信息的属性列表文件;另一个则是打包后的图片文件,可以是png,jpg,pvr.ccz等等格式。建议打包为pvr.ccz格式,因为使用这种图片格式的好处有两点:1、可以使你的应用程序更小,因为图片是被压缩过了的。2、你的游戏能够启动地更快。
TexturePacker官方下载地址:http://www.codeandweb.com/texturepacker/download
下载安装完后,如图1。
最左边参数的设置,最右边为图片的集合。
TexturePacker可以逐一添加图片,也可以整个文件添加图片。其中工具栏上的Add Sprite是逐一添加,Add Folder是整个文件添加。
添加完后,你可以在最左边设置参数,我们要Texture Format处设置成PVR。设置完参数后,点击工具栏的Publich
,选择好保存路径和文件名后即可生成xxx.plist和xxx.pvr。如下图2:
图2:
现在,我们来看看test3.plist的内容。由于有点长,我就摘出关键的来说明。
至于test3.pvr,它是经过压缩后的一种格式。
现在,我们来看看test3.plist在cocos2d-x项目中的引用。首先,我们要把test3.plist和test3.pvr放在..\Resources文件下。
首先我们要导入test3.plist,然后在创建精灵时,指明在test3.plist中小图片的名称。具体代码如代码1,效果如效果1。
代码1:
SpriteFrameCache::getInstance()->addSpriteFramesWithFile("test3.plist");
Sprite* testSprite=Sprite::createWithSpriteFrameName("1.jpg");
testSprite->setPosition(200,200);
this->addChild(testSprite);
效果1:
当不需要此纹理图集,要释放它,如代码2。否则,出现一些奇怪的错误。
代码2:
SpriteFrameCache::getInstance()->removeSpriteFramesFromFile("test3.plist");//根据文件名字释放
SpriteFrameCache::getInstance()->removeSpriteFrames();//全部释放
SpriteFrameCache::getInstance()->removeSpriteFrameByName("xxx");//根据,名字释放
SpriteFrameCache::getInstance()->removeSpriteFramesFromTexture(Texture2d* xxx)//根据纹理来释放
如需转载,请标明出处。