游戏开发工具 - TexturePacker尝鲜

     好久没有写blog了,之前一直在做Android系统开发,所以写的都是关于Android的东西。经过一番激烈的思想斗争,今年3月份终于加盟了一家国内智明的游戏公司,决心在手游领域打拼一下。
     游戏开发过程中用到了很多工具,每个工具都有自己独特的功能,这次先记录一下TexturePacker的基本使用方法。
 
一、TexturePacker概述
     TexturePacker是由一家叫做 CodeAndWeb 的公司开发的,主要功能是将游戏开发中用到的大量的图片整合成一张大图,并且经过一些压缩处理,使得图片资源在编译和运行时都能够占用尽可能少的资源,和最高的运行效率。
 
 
     TexturePacker支持的游戏引擎种类很广泛,可能大部分国内开发者都在用cocos2dx,具体支持的引擎如下:

 
     官方也提供了各个平台的一些教程的文档:
 
二、使用TexturePacker有什么好处
     首先,是内存问题, OpenGL ES  纹理的宽和高都要是2次幂数, 以刚才的例子来说, 假如 start.png 本身是 480x320, 但在载入内存後, 它其实会被变成一张 512x512 的纹理, 而start.png 则由 101x131 变成 128x256, 默认情况下面,当你在cocos2d里面加载一张图片的时候,对于每一个像素点使用4个byte来表示--1个byte(8位)代表red,另外3个byte分别代表green、blue和alpha透明通道。这个就简称RGBA8888。
     因此,如果你使用默认的像素格式来加载图片的话,你可以通过下面的公式来计算出将要消耗多少内存来加载:
  图像宽度(width)×图像高度(height)×每一个像素的位数(bytes per pixel) = 内存大小
  此时,如果你有一张512×512的图片,那么当你使用默认的像素格式去加载它的话,那么将耗费
  512×512×4=1MB
 
     其次,再看看关於渲染速度方面, OpenGL ES 上来说我们应该尽量减少渲染时切换纹理和 glDrawArray 的呼叫, 刚才的例子每画一个图像都会切换一次纹理并呼叫一次 glDrawArray , 我们这里只画3样东西, 所以不会看到有什麽问题, 但如果我们要渲染几十个甚至几百个图像 , 速度上就会被拖慢. 很明显这并不是我们所想要的..
 
三、TexturePacker的基本使用方法
     以下是TexutrePacker的主界面,几个常用的部分已经标识了出来。


 
     点击Publish可以导出纹理文件(png或者其他压缩格式的文件),和plist描述文件。在程序中使用这两个文件就可以加载你的图片资源了,代码类似于:
CCSprite *GetSprite(const char *file_name ) {
    CCSprite *psprite = new CCSprite( );
    psprite->autorelease();
    // Search in the cache, first
    CCSpriteFrameCache *sfc = CCSpriteFrameCache::sharedSpriteFrameCache();
    CCSpriteFrame *psf = sfc->spriteFrameByName( file_name );
    if( psf != NULL ) {
       psprite->initWithSpriteFrame( psf );
       return psprite;
    }
    CCLog("WARNING : %s not in a PACK!", file_name );
    psprite->initWithFile( file_name );
    return psprite;
 }
 
 
     除了TexturePacker外,CodeAndWeb也提供了另外两个非常不错的工具:SpriteIlluminator、PhysicsEditor,这个两个以后再做研究吧。 

猜你喜欢

转载自rayleeya.iteye.com/blog/2216770