在很多情况下,我们在cocos2d-x 加载精灵都是一张一个精灵的加载。这种方法对于较少的精灵存在的游戏是比较方便的。但是一旦精灵很多,我们就没必要一个个加载了。
在cocos2d有一种将很多图片保存成为一张大图片,然后独取出来单独使用,这个方法就是plist的图片帧文件,它能极大的减小图片体积,最重要的是大图就能符合2的N次幂宽高的要求了。
先看看没有使用plist文件时的文件大小:(6M多,恐怖!)
TexturePackerGUI是专门制作cocos2d plist文件的软件,这个软件最好的优势是有Windows版本的。下面是简单的使用方法:
打开TexturePackerGUI,将前面的开始界面素材拖入到窗口的右侧栏中。
建议将DataFormat改成cocos2d-0.99.4,然后点击Publish按钮,保存为game.plist,浏览位置就会发现多出一个game.png(你保存在哪里,图片就在那里生成加载),它们之间是对应的。将其添加到Content工程里,然后做如下两个修改:
1、修改一下game.png的Content Processor内Textrue Format属性为DxtCompressed。(注意图片的位置,一般都要和plist文件分开存放,不然会有同名错误)
2、修改game.plist的输入和输出管线,因为plist需要cocos2dxna的独特的内容管线,所以先添加引用:
然后选择game.plist属性,将输入和输出的管线修改:
下一步就是如何在代码中使用plist文件:
public PlistClass() { //base.init(); CCSpriteFrameCache.sharedSpriteFrameCache().addSpriteFramesWithFile ("game", "plist/images/game"); CCSprite background = CCSprite.spriteWithSpriteFrameName("GameMenuImg.png"); background.position = new CCPoint(400, 240); addChild(background, 0); CCSize s = CCDirector.sharedDirector().getWinSize(); CCMenuItemSprite sMenu = CCMenuItemSprite.itemFromNormalSprite (CCSprite.spriteWithSpriteFrameName("Start.png"), CCSprite.spriteWithSpriteFrameName("Start.png"), this, sss); CCMenu menus = CCMenu.menuWithItems(sMenu); menus.alignItemsVerticallyWithPadding(20); addChild(menus); }
这段代码中使用CCSpriteFrameCache载入了plist文件和png文件,用它们来提前所需要的图片帧,之后在程序中使用,CCSpriteFrameCache是一个仓库,使用文件名来标识所有的内容资源,CCSprite.spriteWithSpriteFrameName能够直接依据文件名从中取出使用。
但是,效果嘛。。。
看到上图的红色没,用TexturePackerGUI工具publish之后居然颜色改变了。后来上网查了才知道,这是因为没有license造成的。如果购买的话,需要264.72块(这还是作者发回邮件给我时提到的一个错误!失败啊!!!)我想,很多中国人应该都不会自己掏腰包买。如果是公司就另算了。不过有个好消息是,该软件的作者有提供免费的license给我们,但是要自己申请。
同时,这是我本人经验强力推荐,与其去百度一个TexturePackerGUI工具,还不如直接去官网下载,不需要什么破解版,你也可以去找作者申请license!
我去到TexturePackerGUI的官网找了一下,地址如下
http://www.codeandweb.com/texturepacker/support,浏览到网页中间部分,
有个“Free version” 里面有
“Where can I get the free license?Just fill out the Request Free License form.
I'll have a look at your blog and if it fits the requirements you'll receive an email with the license keys.”
填写自己的资料然后就看人品了。
很高兴,我今天终于收到了作者给我的回执,非常感谢你,Andreas Löw。我会好好利用它的!