首先对于使用过精灵的童鞋很熟悉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
2
3
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文件的时候加上以下代码:

1
[CCTexture2D setDefaultAlphaPixelFormat:kCCTexture2DPixelFormat_Default];

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

1
[CCTexture2D PVRImagesHavePremultipliedAlpha:YES];

 [CCTexture2D PVRImagesHavePremultipliedAlpha:YES]; 如果在项目中添加了这句话,但是一定也不能忘记在TP工具中将倒数第二项打钩,否则你就悲剧了 ;

       打包成pvr格式的不要忘记在TP打包前将TP的倒数第二个选项打钩哦~;

转载于:https://www.cnblogs.com/aibox222/p/8716188.html

cocos2d-x 内存优化之prv.ccz plist 文件加载相关推荐

  1. Cocos2d之Texture2D类详解之将文件加载成Texture2D对象

    一.声明 笔者以cocos2d框架cocos2d-x-3.3rc0版本的源码做分析.本文为笔者原创,允许转载和分享,只要注明文章出处即可. 二.简介 Texture2D类简介 Texture2D类允许 ...

  2. Android Cocos2dx引擎 prv.ccz/plist/so等优化缓存文件,手把手ida教你逆向工程反编译apk库等文件

    前段时间在 Android play 上看到一个很牛逼的 3D 动态天气预报,效果真的很炫,二话不说动手 dex2jar.bat/apktool 发现这并没 有什么卵用,在核心的地方看见 native ...

  3. Android Cocos2dx引擎 prv.ccz/plist/so等优化缓存文件,手把手ida教你逆向project反编译apk库等文件...

    前段时间在 Android play 上看到一个非常牛逼的 3D 动态天气预报,效果真的非常炫.二话不说动手 dex2jar.bat/apktool 发现这并没 有什么卵用,在核心的地方看见 nati ...

  4. 优化Flash中的3D模型加载

    2019独角兽企业重金招聘Python工程师标准>>> 来自:Kid's Zone 最近在做一个公司的Flash3D页游项目,遇到了这个问题,前前后后断断续续也优化了一段时间,觉得还 ...

  5. 又优化了一下 Android ListView 异步加载图片

    写这篇文章并不是教大家怎么样用listview异步加载图片,因为这样的文章在网上已经有很多了,比如这位仁兄写的就很好: http://www.iteye.com/topic/685986 我也是因为看 ...

  6. vue2首屏性能优化(splitChunks/externals/gzip/路由懒加载)

    首屏加载慢原因: Vue只有第一次会加载页面, 以后的每次页面切换,只需要进行组件替换.因为Vue 是SPA,所以首页第一次加载时会把所有的组件以及组件相关的资源全都加载了,造成网站首页打开速度变慢的 ...

  7. vue路由懒加载_优化vue项目的首屏加载速度

    最近使用vue-cli3构建了一个小型的博客系统,完工之后,build打包出来发现一个chunk-vendors包就有1.1m,部署上去之后,访问的时候,首屏加载非常慢.居然需要21s,体验极差. 这 ...

  8. nginx加载图片慢_优化vue项目的首屏加载速度

    最近使用vue-cli3构建了一个小型的博客系统,完工之后,build打包出来发现一个chunk-vendors包就有1.1m,部署上去之后,访问的时候,首屏加载非常慢.居然需要21s,体验极差. 这 ...

  9. 网页速度很慢优化方案:如何提高网页加载速度,提升网站加载速度

    网站加载速度的快慢,直接影响用户的去留.这里为大家持续更新我的经验,帮你解决网页速度很慢,慢在哪里,该怎么优化的问题.希望对你有所帮助! 1.  网站空间要好:网站需要一个稳定的服务器或者虚拟机,可以 ...

最新文章

  1. 你负责选歌,索尼负责用 AI 谱出风格相似的曲子
  2. 基于机器视觉的手机产品条码检测方案
  3. 给vs2010安装上cocos2d-x的模版
  4. [Remoting专题系列] 十一:事件
  5. centos7自带数据库MariaDB重启和修改密码
  6. 什么?你做的差异基因方法不合适?
  7. 7 WM配置-主数据-定义拣配区(Picking Area)
  8. x86汇编语言——基本概念
  9. ajax项目中使用模板
  10. php常见预定义常量,php跨平台小结 常用预定义常量
  11. 程序员的mysql经典pdf_程序员的SQL金典 杨中科著 中文 PDF版
  12. 我在豆瓣“请假借口研究所”,看见了社畜的人间真实
  13. 【问题解决】Springboot项目启动日志不显示端口号,而且日志也很少!
  14. 相亲网站平台制作建设,第九篇
  15. 利用Kalibr标定Camera-IMU外参
  16. python ipad pro_离开 PC,在 iPad Pro 上也能编程了?
  17. 【OpenGL学习笔记五】 索引缓冲对象EBO
  18. 微信小程序—相关配置
  19. 牛客网>在线编程 > 剑指Offer>入口
  20. jw player 源码编译运行笔记

热门文章

  1. Python 对图片进行颜色识别
  2. aec一pc_AEC_PC_DLL.dll文件下载|AEC_PC_DLL.dll文件损坏或丢失修复下载 - 维维软件园...
  3. html5默认加载s文件夹,『总结』web前端开发常用代码整理
  4. 计算机菜单打不开,电脑右键菜单打不开怎么办
  5. 蓝牙耳机芯片,苹果弹窗电量显示为0的解决方法
  6. 求一个数的所有因数的和
  7. RT-Thread学习笔记
  8. DSPack初次使用小结
  9. 走进JEDEC,解读DDR(上)
  10. 供独立游戏开发者参考的2D美工教程