`
shuai1234
  • 浏览: 972475 次
  • 性别: Icon_minigender_1
  • 来自: 山西
社区版块
存档分类
最新评论

【Cocos2d游戏开发之九】CCSpriteBatchNode与"pvr.ccz","plist"精灵优化及注意事项

 
阅读更多

  首先对于使用过精灵的童鞋很熟悉CCSpriteBatchNode,至少大家都会知道它能优化精灵,但是至于优化原理这里简单说下:

            一般使用精灵CCSprite的时候,都是直接使用[CCLayer* addChild:CCSprite *];,假设我们创建一百个精灵,那么当前的CCLayer会为100个精灵单独绘制;

           如果使用精灵集合-CCSpriteBatchNode的话,直接将集合CCSpriteBatchNode添加CCLayer中即可,即使创建一百个精灵,我们也都是将100个精灵添加到集合中,[CCSpriteBatchNode* addChild:CCSprite];而已;

           两者的区别:

         1.  直接使用CCLayer进行添加精灵,CCLayer上有几个精灵,那么底层就会绘制几次精灵;

                      简单可以理解成底层绘制方式如下:

                      for(int i= 0;i<100;i++){open-draw-close;}

          但是使用集合的话,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"两个文件的使用方式其实也很简单,代码如下:

  1. [[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"XX.plist"];  

    以上代码是将".pvr.ccz"资源包的图进行加载到精灵帧缓存中,一旦加载过后,你就可以任意使用了,比如你将icon.png和himi.png两张图片一起利用工具打包成“.pvr.ccz”、".plist"两个文件后,将两个文件放在项目下(两张图片不需要了),然后使用刚才的代码将资源包加载缓存中,只需要加载plist文件即可,pvr.ccz的不需要加载,但是也需要放在项目下,然后你在创建精灵的时候可以使用以下形式进行创建精灵:

  1. CCSprite *sprite = [CCSprite spriteWithSpriteFrameName:@"himi.png"];  


      通过上面这行代码可以看出,此种创建精灵的方式是利用帧缓存创建的,那么也就是说一旦加载的许多个一样的精灵的时候利用此方式相当优化运行内存,最容易想到的就是创建子弹;

       那么肯定会有童鞋说,那么如果把这资源文件与CCSpriteBathNode结合使用岂不是更嗨皮,没错,可以的,加载的时候只需要将如下创建集合即可: 

  1. CCSpriteBatchNode spritesBgNode = [CCSpriteBatchNode batchNodeWithFile:@"xx.pvr.ccz"];  
  2. [CCLayer* addChild:spritesBgNode];      
  3. [[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文件的时候加上以下代码: 

  1. [CCTexture2D setDefaultAlphaPixelFormat:kCCTexture2DPixelFormat_Default];  


一些教程都会加,但是加上之后发现图片透明像素都被白色填充!

    而且在使用TexturePacker工具选取打包成pvr.ccz格式的时候会提示让你加上这么一句代码: 

  1. [CCTexture2D PVRImagesHavePremultipliedAlpha:YES];  

   工具原文提示如下: 

  Himi在代码中测试过,有木有这句都无所谓,不会有什么影响,至少在cocos2d 1.0.0的版本中加不加无所谓;

         好了,这篇就到这里,继续忙了。。。。。。

 

本文出自 “Himi” 博客,请务必保留此出处http://xiaominghimi.blog.51cto.com/2614927/660865

分享到:
评论

相关推荐

    cocos2d-x 开发必备软件 .pvr.ccz转换成png

    在cocos2d-x游戏开发过程中,图像资源的管理和优化是至关重要的,因为它们直接影响到游戏的性能和加载速度。`.pvr.ccz`是一种专为cocos2d-x设计的高效、压缩的纹理格式,它能有效地减少内存占用并提高渲染效率。然而...

    将.pvr.ccz和plist文件还原为多个原图-工具

    标题提到的".pvr.ccz"和"plist"文件是Cocos2dx中常用的两种资源格式,它们在优化游戏性能和减小游戏包大小方面起着关键作用。 .pvr.ccz文件是Cocos2dx中的压缩纹理格式,它由PVRTC(PowerVR Texture Compression)...

    Cocos2d-x 游戏资源(图片、XML、TXT等)打包加密 之 解密读取

    在游戏开发领域,资源管理是至关重要的,尤其是在移动端游戏如使用Cocos2d-x框架时。Cocos2d-x是一个跨平台的2D游戏引擎,支持多种操作系统,包括iOS、Android以及Windows等。为了保护游戏资源不被轻易篡改或盗用,...

    plist文件还原为多个原图-工具.zip

    2. 将`.pvr.ccz`和对应的`.plist`文件放在同一目录下。 3. 运行`split.py`,指定`.plist`文件作为输入参数。脚本会读取`.plist`中的数据,并对`.pvr.ccz`进行解压和切割。 4. 脚本完成后,会在当前目录下生成一组新...

    cocos2d游戏开发之旅

    《cocos2d游戏开发之旅》是一本专为游戏开发初学者设计的教程,它深入浅出地介绍了使用cocos2d框架进行移动游戏开发的基本概念和技术。cocos2d是一个广泛使用的开源游戏引擎,特别适合开发2D游戏,其易用性、灵活性...

    cocos2d游戏开发

    本教程涵盖从基础到进阶的cocos2d游戏开发全过程,共13章节,旨在帮助开发者快速掌握这一强大的游戏引擎。 第一章:入门介绍 本章首先会介绍cocos2d的历史、特性以及它在游戏开发中的应用。然后,会引导初学者安装...

    cocos2d游戏开发基础(一).pdf

    ### cocos2d游戏开发基础知识点概述 #### 一、cocos2d简介 cocos2d是一款专为iOS和跨平台游戏开发设计的开源框架。它不仅能够支持2D游戏的构建,还提供了丰富的功能来简化游戏开发过程。cocos2d的核心优势在于其...

    cocos2d游戏开发电子书超清

    《cocos2d游戏开发电子书超清》是一本针对初学者的游戏开发指南,专注于cocos2d框架的使用。cocos2d是一款强大的、开源的2D游戏引擎,广泛应用于iPhone游戏开发以及移动平台的其他应用开发。本书旨在帮助读者快速...

    cocos2dx3.x游戏开发之旅电子版

    《Cocos2d-x 3.x游戏开发之旅》是一本深度探讨Cocos2dx 3.x框架的游戏开发专著,适合对游戏编程有兴趣并有一定基础的开发者。Cocos2dx是一个开源的游戏开发框架,它基于C++,同时支持多种语言,如Lua和JavaScript,...

    Cocos2d游戏开发实战全本

    Cocos2d游戏开发是一个专注于2D游戏开发的开源框架,它支持多种操作系统和编程语言,广泛应用于iOS、Android、Windows等平台的游戏开发。Cocos2d允许开发者快速构建游戏应用,其丰富的功能和灵活的设计让游戏开发变...

    Cocos2d-x 3.X游戏开发实战 (肖文吉) 完整pdf

    《Cocos2d-x 3.X游戏...通过阅读《Cocos2d-x 3.X游戏开发实战》,开发者不仅可以掌握Cocos2d-x 3.X的基本用法,还能学习到游戏开发的全貌,包括设计、实现、测试和优化等各个环节,从而有能力独立完成2D游戏的开发。

    cocos plist资源图片文件等

    Cocos2d-x是一款流行的开源游戏开发框架,广泛用于创建2D游戏、应用程序和互动内容。在Cocos2d-x中,"cocos plist资源图片文件等"涉及到的关键概念是plist文件和纹理(texture)的使用,它们是游戏资源管理的重要...

    cocos2d游戏开发入门

    Cocos2D-iPhone是iOS平台上一款广受欢迎的2D游戏开发框架,它以其高效、易用和功能丰富而受到开发者们的青睐。本教程将带你踏入Cocos2D游戏开发的大门,通过学习,你将掌握如何利用这个强大的工具创建令人惊叹的2D...

    FlappyBirdRes

    cocos2d是一款开源的2D游戏开发框架,支持多种平台,包括iOS、Android等。它提供了丰富的图形渲染、物理模拟、动画控制等功能,使得开发者能够快速构建游戏。在FlappyBirdRes中,PVR.CCZ格式的图片正是与cocos2d引擎...

    Cocos2d-x 3.x游戏开发实战pdf含目录

    Cocos2d-x 是一个开源的、跨平台的2D游戏开发框架,广泛应用于iOS、Android、Windows等多平台的游戏开发。3.x版本是其发展中的一个重要阶段,引入了多项优化和新特性,旨在提高开发效率和性能。 本书首先会介绍...

    《Cocos2d-Js开发之旅-从HTML5到原生手机游戏》完整源码

    Cocos2d-Js是Cocos2d-x家族的一员,是一个跨平台的、基于JavaScript的开源游戏引擎,支持创建2D游戏、交互式图书和其他富媒体应用。通过Cocos2d-Js,开发者可以用一种语言编写代码,然后在多个平台上运行,包括Web、...

    王哲:Cocos2D游戏性能优化

    Cocos2D这款用于开发2D游戏的开发框架以及由其衍生的Cocos2D-X跨平台开发框架和众多分支,正在帮助越来越多的开发者实现高效稳定的游戏开发。Cocos2D的稳定性、可商用型和流行程度已无需证明。目前App Store中国区...

    PngConverter

    它支持多种资源格式,其中包括pvr.ccz,这是一种专为Cocos2dx优化的图像压缩格式。然而,在某些情况下,我们可能需要将这些资源转换为更通用的PNG格式,以便于编辑或在其他不支持pvr.ccz的环境中使用。这就是...

    cocos2d游戏实例完整代码

    这个“cocos2d游戏实例完整代码”提供了从基础到进阶的游戏开发实践,是初学者深入理解cocos2d框架的理想资源。 在iOS游戏开发中,cocos2d引擎扮演着核心角色,它包含了场景(Scene)、层(Layer)、精灵(Sprite)...

Global site tag (gtag.js) - Google Analytics