【黑米GameDev街区】 原文连接: http://www.himigame.com/iphone-cocos2d/465.htmlcss
前几节因为时间紧张,只是将一些遇到的问题拿出来进行分享经验,那么今天抽空写一篇经常使用的精灵以及精灵经常使用和注意的一些知识;那么因为cocos2d教程基本很完善,那么今天Himi介绍一些注意点和细节点分享你们;html
首先对于使用过精灵的童鞋很熟悉CCSpriteBatchNode,至少你们都会知道它能优化精灵,可是至于优化原理这里简单说下:
缓存
通常使用精灵CCSprite的时候,都是直接使用[CCLayer* addChild:CCSprite *];,假设咱们建立一百个精灵,那么当前的CCLayer会为100个精灵单独绘制;iphone
若是使用精灵集合-CCSpriteBatchNode的话,直接将集合CCSpriteBatchNode添加CCLayer中便可,即便建立一百个精灵,咱们也都是将100个精灵添加到集合中,[CCSpriteBatchNode* addChild:CCSprite];而已;工具
二者的区别:测试
1. 直接使用CCLayer进行添加精灵,CCLayer上有几个精灵,那么底层就会绘制几回精灵;优化
简单能够理解成底层绘制方式以下:spa
for(int i= 0;i<100;i++){open-draw-close;}.net
可是使用集合的话,CCLayer只须要对精灵集合进行一次渲染,调试
简单能够理解成底层绘制方式以下:
open-draw(100次绘制)-close
从以上两种方式能够看出二者的区别了,第二种使用精灵集合省去了99次open和close的过程,从而达到优化做用;
上次参加iOS第四次开发者大会,cocos2d-x的张哲在演讲中重点拿出了这一点进行讲解,他在ipad上使用两种方式给出的数据以下:
在屏幕中绘制3000个精灵,直接使用CCLayer添加精灵的方式,帧数从60降低到不到20帧;
一样在屏幕中绘制3000个精灵,使用CCSpriteBatchNode的渲染方式,帧数保持在50帧左右;
固然Himi也亲自测试过,可是因为真机调试的还没申请下来,因此只能在模拟器上测试,发现同时绘制300个精灵,两种方式帧数一致,无区别;不是由于没差异,而是由于在iOS模拟器中,帧数与屏幕中的精灵数量有关,真机则会很明显的体现二者的区别;
2.使用CCSpriteBathNode虽然能达到优化,可是要注意一点:
初始化精灵集合CCSpriteBatchNode的时候会加载一张图片资源(或者pvr文件等),那么限制其精灵集合的子精灵都必须使用集合加载的这张图才行,不然会给出警告;
3.使用CCSpriteBatchNode还要注意一点,由于精灵都存放在集合中,那么这个集合CCSpriteBatchNode中的节点(精灵)都将在同一个z轴上,同一深度上;
在上一章中介绍过TexturePacker工具的做用,那么这里不介绍如何使用,而是说下主要的两点,通常使用TexturePacker工具都会将不少精灵图片或者动做帧放在一块儿打包成“.pvr.ccz”、".plist"、“-hd.pvr.ccz”和"-hd.plist"的四个文件,其中两个-hd的是使用工具生成的打包资源的高清版本(940*480)使用的,这个再也不强调了;
至于".pvr.ccz"格式的则是最压缩、最适合iOS的资源文件格式了,那么与".plist"两个文件的使用方式其实也很简单,代码以下:
[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"XX.plist"];以上代码是将".pvr.ccz"资源包的图进行加载到精灵帧缓存中,一旦加载事后,你就能够任意使用了,好比你将icon.png和himi.png两张图片一块儿利用工具打包成“.pvr.ccz”、".plist"两个文件后,将两个文件放在项目下(两张图片不须要了),而后使用刚才的代码将资源包加载缓存中,只须要加载plist文件便可,pvr.ccz的不须要加载,可是也须要放在项目下,而后你在建立精灵的时候可使用如下形式进行建立精灵:
CCSprite *sprite = [CCSprite spriteWithSpriteFrameName:@"himi.png"];
那么确定会有童鞋说,那么若是把这资源文件与CCSpriteBathNode结合使用岂不是更嗨皮,没错,能够的,加载的时候只须要将以下建立集合便可:
CCSpriteBatchNode spritesBgNode = [CCSpriteBatchNode batchNodeWithFile:@"xx.pvr.ccz"]; [CCLayer* addChild:spritesBgNode]; [[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"xx.plist"];
1.使用TexturePacker工具虽然能够对应生成@2x与-hd文件,可是工具会将你导入的全部精灵图的会作做为-hd的资源包生成,而对应的非高清的则是当前图片尺寸缩放一半的资源而已;
2.若是你项目中须要加载使用一张"himi.png"的图的话,那么在cocos2d引擎开发的项目中,首先会去资源中寻找"himi-hd.png"的图片,若是找不到则会去寻找"himi@2x.png"的图,因此这里必定要注意资源的命名和使用;
3.在cocos2d 1.0.0的版本中千万不要在使用pvr.ccz与plist文件的时候加上如下代码:
[CCTexture2D setDefaultAlphaPixelFormat:kCCTexture2DPixelFormat_Default];
[CCTexture2D PVRImagesHavePremultipliedAlpha:YES];工具原文提示以下:
[CCTexture2D PVRImagesHavePremultipliedAlpha:YES]; 若是在项目中添加了这句话,可是,忘记在TP工具中将倒数第二项打钩,那么你就悲剧了 ;
打包成pvr格式的不要忘记在TP打包前将TP的倒数第二个选项打钩哦~;
好了,这篇就到这里,继续忙了。。。。。。