前几节由于时间紧张,只是将一些遇到的问题拿出来进行分享经验,那么今天抽空写一篇常用的精灵以及精灵常用和注意的一些知识;那么由于cocos2d教程基本很完善,那么今天Himi介绍一些注意点和细节点分享大家;

首先对于使用过精灵的童鞋很熟悉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"两个文件的使用方式其实也很简单,代码如下:

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

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

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

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

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

view plain
  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文件的时候加上以下代码:

view plain
  1. [CCTexture2D setDefaultAlphaPixelFormat:kCCTexture2DPixelFormat_Default];

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

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

view plain
  1. [CCTexture2D PVRImagesHavePremultipliedAlpha:YES];

工具原文提示如下:

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

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

本文转自 xiaominghimi 51CTO博客,原文链接:http://blog.51cto.com/xiaominghimi/660865,如需转载请自行联系原作者

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

  1. Cocos2d游戏开发之如何解包获得pvr.ccz中的美术资源

    Cocos2d游戏开发之如何解包获得pvr.ccz中的美术资源 在大部分时候,Cocos2d游戏会将美术资源打包以减轻性能要求,提高加载速度.而如果我们需要获得其中的美术资源,就得解包.这里以plis ...

  2. iOS 5 cocos2d游戏开发实战(第2版)

    <iOS 5 cocos2d游戏开发实战(第2版)> 基本信息 作者: [美]Steffen Itterheim Andreas Low [作译者介绍] 译者: 同济大学苹果俱乐部 丛书名 ...

  3. [转]cocos2d游戏开发,常用工具集合

    cocos2d游戏开发,常用工具集合 原文地址:http://www.cocoachina.com/bbs/read.php?tid-68951.html 位图字体工具Bitmap Font Tool ...

  4. 初学者开发iOS游戏的入门必备用书——iOS 5 cocos2d游戏开发实战(第2版)

    如果想接触iOS游戏开发,今天笔者就推荐一本"大杀器"--<iOS 5 cocos2d游戏开发实战(第2版)>(当当链接) 为零基础的"设想过自己写个电脑游戏 ...

  5. SDL2 游戏开发日记(九) 单机麻将

    SDL2 游戏开发日记(九) 单机麻将 单机麻将的基本功能其实年前已经完成了,只是写文档麻烦,再加上懒癌和重度拖延症,就一直拖着没更新.今天周末一个人没什么事干,抽空把它更新了. 麻将的表示 用数组表 ...

  6. java游戏开发入门(九) -音效

    java游戏开发入门(九) - 图像 前言 音频资源 编码 首先完成BGM 紧接着完成音效部分 项目目录 完整代码 总结 完整项目 前言   对于一个游戏来说,音效也是必不可少的一环,自然也不能少了. ...

  7. 【iOS-Cocos2d游戏开发之二】Cocos2D 游戏开发资源贴(教程以及源码)

     李华明Himi 原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/iphone-cocos2d/420.html 这两天抽出 ...

  8. cocos-2d 游戏开发

    利用cocos-2d游戏引擎进行简单的游戏开发 levelLayer.java package Layer;import android.graphics.Point; import android. ...

  9. Cocos2d游戏开发学习记录——2.使用Cocos2D Graphic实现僵尸的移动

    文章目录 1.游戏引擎Cocos2D 2.图形引擎Cocos2D Graphic 3.实践一 4.Cocos2D的坐标体系 5.CCNode 6.实践二 7.CCAction 8.实践三 9.CCAn ...

最新文章

  1. 泛函编程(19)-泛函库设计-Parallelism In Action
  2. 算法--------字符串中的第一个唯一字符(Java 版本)
  3. alter table add column多个字段_WordPress 在文章列表快速编辑中编辑自定义字段
  4. 如何使用VIM的Help
  5. php中取整的函数,利用PHP怎么对函数进行取整
  6. Struts2文件上传与下载
  7. Servlet-请求匹配,创建Servlet的三种方式,API 1
  8. 跨部门的bug的沟通
  9. maple化简_Maple对多项式化简教程
  10. 网络运维系列:Ubnt ER-X初始化和开启硬件NAT
  11. keras使用LSTM生成文本
  12. PgSQL——学习笔记七: LIKE 子句:获取包含某些字符的数据 LIMIT 子句:限制 SELECT 语句中查询的数据的数量
  13. 2021-2027全球与中国5G物联网市场现状及未来发展趋势
  14. TVS管的参数理解与选型
  15. 计算机系统配置低会带来,电脑配置差装什么系统合适
  16. 核酸检测管理系统,核酸预约系统,核酸检测预约系统毕业设计作品
  17. 物联网普及率目前第一是韩国
  18. MFC中Listbox控件的简单使用
  19. Android彩信介绍
  20. JavaWeb企业财务|记账|账单管理系统设计与实现(含源码+论文+答辩PPT等)

热门文章

  1. .qsv(爱奇艺)以及.flv(流媒体视频)视频格式转码(附转码工具)
  2. 根据cadence设计图学习硬件知识day07 了解一些芯片
  3. 人工智能导论期末复习
  4. 浙江省计算机二级考试选择判断题库,浙江省计算机等级考试二级判断题和答案...
  5. 数据库访问技术的总结 一
  6. gitlab安装并汉化
  7. Win企业版LSTC安装Docker
  8. 中南大学941计算机网络考试大纲,中南大学计算机网络问答题
  9. 弱电包含在计算机专业,弱电包含哪些系统
  10. PTA甲 1152~1155题解