研究了一下CCSpriteBatchNode,说一下个人理解。

我们通常对精灵添加的屏幕的步骤是创建精灵,添加到屏幕。现在我们使用了CCSpriteBatchNode以后,

精灵的添加是首先创建精灵,然后将精灵添加到CCSpriteBatchNode上面去,最后再将CCSpriteBatchNode里面的众多精灵一次性的绘制到屏幕上面。

这样就减少了渲染次数,提高了帧率。不过需要注意的是:添加进batchNode里面的精灵,都是要在CCSpriteBatchNode中是可以找到的

如下面的代码:

  CCSpriteBatchNode *batchNode = CCSpriteBatchNode::create("icon.png");this->addChild(batchNode);pSprite = CCSprite::create("icon.png");pSprite->setPosition(ccp(150,220));//精灵添加到batchNode中,此时精灵已经绘制到了屏幕上了batchNode->addChild(pSprite);

上面的代码就是batchNode中因为存在icon.png这个图片,所以是icon.png的sprite可以添加到这个batchNode里面去
如果你添加其它图片到batchNode里面去的话,直接报错,程序挂了。
但是我们怎么样才能添加多张不同图片的精灵到Sprite里面呢?
可以通过CCSpriteFrameCache将TP打包的多张图片读入内存,这样就可以解决上面那个需求了。

如下代码:

   //载入TP打包的plist和png文件到内存(有2张图片分别是res1.png和res2.png)CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("res.plist");CCSpriteBatchNode *batchNode = CCSpriteBatchNode::create("res.png");this->addChild(batchNode);//创建精灵pSprite = CCSprite::createWithSpriteFrameName("res1.png");pSprite->setScale(0.2f);pSprite->setPosition(ccp(150,220));//精灵添加到batchNode中,此时精灵已经绘制到了屏幕上了batchNode->addChild(pSprite);pSprite2 = CCSprite::createWithSpriteFrameName("res2.png");pSprite2->setScale(0.2f);pSprite2->setPosition(ccp(100,250));//精灵添加到batchNode中,此时精灵已经绘制到了屏幕上了batchNode->addChild(pSprite2);

上面的代码在屏幕上只绘制1次。不像我们创建精灵直接绘制到屏幕上那样,创建几个精灵添加到屏幕上就需要绘制几次。假如上面的代码没有使用CCSpriteBatchNode,而是直接创建精灵添加到CCLayer上的话,我们的绘制次数是2、

当我们在屏幕上绘制几千个精灵时,这种使用batchNode的好处就可以体现了。

可以把CCSpriteBatchNode想像成一个Layer(绘制到真正CCLayer屏幕之前的缓冲层Layer),关于精灵叠放层次的调整是在添加到batchNode上时调整的,调整好以后,就可以再将这一张batchNode整个绘制到CCLayer屏幕上面。

所以我们不能在将batchNode添加到真正的层时,再来调整精灵的层次结构,这时已经迟了。

转载于:https://www.cnblogs.com/vokie/p/3602061.html

CCSpriteBatchNode的使用相关推荐

  1. cocos2d: 使用TexturePacker , pvr.ccz, CCSpriteBatchNode, CCSpriteFrameCache

    Optimus:在cocos2d中如何高效使用图片总结 使用Photoshop等工具制作单张图片,放在Resources目录下某个或几个目录下,使用TexturePacker打包图片成pvr.ccz文 ...

  2. cocos2dx打飞机项目笔记五:CCSpriteBatchNode 的使用

    在上一节里,在头文件看到 定义了一个 CCSpriteBatchNode* batchNode;,在addEnemy方法里看到 batchNode->addChild(enemy); 新建的敌机 ...

  3. 3.游戏优化(CCSpriteBatchNode)

     1 FPS含义 2 渲染树的结构 3 优化原理 CCSpriteBatchNode介绍 A 先说下渲染批次:这是游戏引擎中一个比较重要的优化指标,指的是一次渲染调用.也就是说,渲染的次数越少,游 ...

  4. CCSpriteBatchNode(附:CCMenu与CCSpriteBatchNode的问题)

    一般游戏图片资源会打包成一张大图,这样节省空间,又提升速度.打包工具有Zwoptex和texturepacker等等. CCSpriteBatchNode的初始化只要一张图片,也就是那张大图.然后把所 ...

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

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

  6. [Quick-x]制作新手引导高亮区域方法之二:裁剪模式

    demo下载:https://github.com/chenquanjun/Quick-x-HighlightArea 2.裁剪模式 (1)创建裁剪对象 local bgColor = ccc3(25 ...

  7. ios(iphone/ipad)开发笔记(1)

    CGContextRefCGContextRef iphone开发刚刚入门 求个师傅 iphone拨号键盘 请问自己如果做sdk OpenGL ES 2.0有没有顶点光照的例子? socket通信哪位 ...

  8. cocos2dx 3.x(动态改变精灵的背景图片)

    //更换精灵CCSprite的图片有两种方式. //直接通过图片更换 //使用setTexture(CCTexture2D*)函数,可以重新设置精灵类的纹理图片. // auto bg = Sprit ...

  9. 一、cocos2dx之如何优化内存使用(高级篇)

    本文由qinning199原创,转载请注明:http://www.cocos2dx.net/?p=93 一.内存优化原则 为了优化应用内存,你应该知道是什么消耗了你应用的大部分内存,答案就是Textu ...

最新文章

  1. 《图解HTTP》读书笔记--第2章简单的HTTP协议
  2. MySQL中的字符串连接
  3. tomcat web.xml配置
  4. P3700-[CQOI2017]小Q的表格【分块,欧拉函数】
  5. ERP产品销售发货判断库存功能(四十二)
  6. ftp服务器通常提供文件上传和,基于FTPClient的文件上传至Nginx服务器
  7. asp.net mvc bundle中数组超出索引
  8. WPF 框架开发 ColumnDefinition 和 RowDefinition 的代码在哪
  9. duet二重奏hp_Duet游戏安卓下载|Duet二重奏最新版下载v2.0.4-乐游网安卓下载
  10. 聚类分析用matlab还是spass,利用Matlab和SPSS软件实现聚类分析
  11. Spring JdbcTemplate声明式事务
  12. 使用node批量压缩图片
  13. 作文组装计算机,组装电脑作文200字
  14. 2022CTFSHOW菜狗杯部分MISC(二)
  15. 使用turtle 绘制正方形和圆
  16. etcd (一看就会)
  17. java p2p技术内幕.pdf_JavaP2P技术内幕
  18. 什么是示波器?示波器的使用方法图解
  19. TL431接线参数和几种应用
  20. UCML.NET开发平台 - 产品简介

热门文章

  1. Python Django 配置URL的方式(url传参方式)
  2. Java基础--内部类及匿名内部类
  3. Spring实现web开发的环境搭建
  4. 【超坑人的面试题】switch没有break
  5. 光盘在电脑上为什么放不出来_铁砂掌这么厉害,为什么上擂台用不出来
  6. 1.2.2 OSI参考模型(应用层、表示层、会话层、传输层、网络层、数据链路层、物理层)
  7. scrcpy设置快捷键_电脑端scrcpy控制Android手机
  8. 操作系统原理 : 非连续的内存分配,分段,页表
  9. 算法练习day14——190402(贪心:切金条、做项目、会议室安排)
  10. Ubuntu中update-alternatives命令(版本切换)