(转载注明出处,谢谢:http://www.cnblogs.com/binxindoudou/archive/2013/03/25/2980704.html:)
这个在网上有好多解释,但大多过于繁琐,简单说来,CCSpriteBatchNode可以减少渲染次数,而贴图集就是放在一张大图里,可以节省内存空间
下面三个例子是一个游戏关卡的按钮例子,将各个关卡的图片放入一张levels.png中,然后依靠名字进行读取即可。
1.CCSpriteBatchNode的单独使用
1 //经典子弹生100个 2 CCSpriteBatchNode *batchNode = [CCSpriteBatchNode batchNodeWithFile:@"bullet.png"]; 3 //先添加批处理容器 4 [self addChild:batchNode]; 5 //将每个精灵添加到批处理容器中 6 for(int i = 0 ; i < 100; i++) 7 { 8 CCSprite *sprite = [CCSprite spriteWithSpriteFrameName:@"bullet.png"]; 9 [batchNode addChild:sprite]; 10 }
2.贴图集单独的使用
1 [[CCSpriteFrameCachesharedSpriteFrameCache] addSpriteFramesWithFile:@"levels.plist"]; 2 CCSprite *sprite = [CCSpritespriteWithSpriteFrameName:@"level1.png"];
3.CCSpriteBatchNode和贴图集的结合使用
1 //帧缓冲区将levels.plist读取,可以将对应该名称的levels.png图片的内部子图片的名称位置大小的信息放入内存中,以便以后取用 2 [[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"levels.plist"]; 3 //将这个大图放入内存中,只需渲染一次就可多次使用,提高运行效率;配合levels.plist依据图片的名称进行识别,进而裁剪出需要的那块元素 4 CCSpriteBatchNode *batchNodeOfLevels = [CCSpriteBatchNode batchNodeWithFile:@"levels.png"]; 5 //将这个batchNode填入场景中,这个batchNode就一次添加到内存中 6 [self addChild:batchNodeOfLevels]; 7 //直接使用贴图集中一个图片的名称就可以了 8 CCSprite *spriteOfLevelOne = [CCSprite spriteWithSpriteFrameName:@"level1.png"]; 9 //记住一定要将该精灵放入batchNode中,相当于一个容器,放入其中,当下次访问时,直接从该容器中进行访问,减少渲染次数 10 [batchNodeOfLevels addChild:spriteOfLevelOne];
以上只是我自己的学习笔记,有什么问题欢迎一起来探讨。
(转载注明出处,谢谢:http://www.cnblogs.com/binxindoudou/archive/2013/03/25/2980704.html:)