cocos2d中的图片使用(CCSpriteBatchNode)

来源:互联网 发布:杨支柱事件知乎 编辑:程序博客网 时间:2024/05/21 10:43

转载自:http://hi.baidu.com/amigoradio/blog/item/10441f0974360598d0581b44.html

最先接触到的是CCSprite,就是一张图片,可以是背景可以是一个按钮图片。如下

CCSprite *bg1 = [CCSprite spriteWithFile:@"bg1.png"];

bg1.anchorPoint = CGPointZero;

bg1.position = CGPointMake(100200);

[self addChild:bg1 z:1];

但一个scene中如果有很多的图片将会导致占用很多内存,加载速度变慢。这时候就需要使用CCSpriteBatchNode了,有两个工具可以用来做这个事情

TexturePacker    免费版中会将倒出的图片中加入红色。 拥有zwoptex的90%的功能

zwoptex          7天免费试用   在线版免费但功能少http://zwoptexapp.com/flashversion


谁叫我没钱呢,只好使用zwoptex的在线版生成png图片和plist文件,本来相买TexturePacker的,功能强大用起来很方便,但转换成的pvr.ccz图片不能加载到CCSpriteFrameCache里面,最后也没找到问题原因。但zwoptex的在线版就没有这个问题,下面是代码


CCSpriteBatchNode *s = [CCSpriteBatchNode batchNodeWithFile@"p.png"];

[self addChild:s z:1];

[[CCSpriteFrameCache sharedSpriteFrameCacheaddSpriteFramesWithFile:@"p.plist"];


CCSprite *next = [CCSprite spriteWithSpriteFrameName:@"next.png"];

next.position=ccp(450,600);

[s addChild:next z:1];


但zwoptex不能导出pvr格式的图片,所以使用texturetool工具来转换图片,这个工具是iphone sdk自带的。位于

/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin


我是将这个路径加入到mac的环境变量里面了,这样很多sdk的命令都可以很方便的使用

sudo vim /etc/paths 

然后讲sdk的路径加入到paths中就可以,你可以在任何目录输入$texturetool来查看是否添加成功


$texturetool -e PVRTC -o ./p.pvr -f PVR ./p.png


更费劲的来了,因为p.plist文件是zwoptex导出的所以他里面会记着p.png这个图片,但我们现在是pvr了,所以要修改p.plist文件。

根据分析addSpriteFramesWithFile的源码看出来,一种是通过plist里面metadata中的textureFileName来获取图片的,另一种是没有metadata则默认为png。zwoptex则是后一种。所以只好修改成前一种了。TexturePacker输出的是前一种


使用pvr则需要在代码中加入[CCTexture2D PVRImagesHavePremultipliedAlpha:YES];

然后是压缩图片,ccz是怎样压缩出来的我没有找到方法,只好使用gz

$gzip p.pvr

也可以使用 https://github.com/cjhanson/PNGPOTimizer/tree/CCZ 需要自己编译

压缩后的大小还是很可观的,pvr文件是37K pvr.gz文件是12K