CCSpriteBatchNode的使用
研究了一下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的使用相关推荐
- cocos2d: 使用TexturePacker , pvr.ccz, CCSpriteBatchNode, CCSpriteFrameCache
Optimus:在cocos2d中如何高效使用图片总结 使用Photoshop等工具制作单张图片,放在Resources目录下某个或几个目录下,使用TexturePacker打包图片成pvr.ccz文 ...
- cocos2dx打飞机项目笔记五:CCSpriteBatchNode 的使用
在上一节里,在头文件看到 定义了一个 CCSpriteBatchNode* batchNode;,在addEnemy方法里看到 batchNode->addChild(enemy); 新建的敌机 ...
- 3.游戏优化(CCSpriteBatchNode)
1 FPS含义 2 渲染树的结构 3 优化原理 CCSpriteBatchNode介绍 A 先说下渲染批次:这是游戏引擎中一个比较重要的优化指标,指的是一次渲染调用.也就是说,渲染的次数越少,游 ...
- CCSpriteBatchNode(附:CCMenu与CCSpriteBatchNode的问题)
一般游戏图片资源会打包成一张大图,这样节省空间,又提升速度.打包工具有Zwoptex和texturepacker等等. CCSpriteBatchNode的初始化只要一张图片,也就是那张大图.然后把所 ...
- 【Cocos2d游戏开发之九】CCSpriteBatchNode与pvr.ccz,plist精灵优化及注意事项
前几节由于时间紧张,只是将一些遇到的问题拿出来进行分享经验,那么今天抽空写一篇常用的精灵以及精灵常用和注意的一些知识:那么由于cocos2d教程基本很完善,那么今天Himi介绍一些注意点和细节点分享大 ...
- [Quick-x]制作新手引导高亮区域方法之二:裁剪模式
demo下载:https://github.com/chenquanjun/Quick-x-HighlightArea 2.裁剪模式 (1)创建裁剪对象 local bgColor = ccc3(25 ...
- ios(iphone/ipad)开发笔记(1)
CGContextRefCGContextRef iphone开发刚刚入门 求个师傅 iphone拨号键盘 请问自己如果做sdk OpenGL ES 2.0有没有顶点光照的例子? socket通信哪位 ...
- cocos2dx 3.x(动态改变精灵的背景图片)
//更换精灵CCSprite的图片有两种方式. //直接通过图片更换 //使用setTexture(CCTexture2D*)函数,可以重新设置精灵类的纹理图片. // auto bg = Sprit ...
- 一、cocos2dx之如何优化内存使用(高级篇)
本文由qinning199原创,转载请注明:http://www.cocos2dx.net/?p=93 一.内存优化原则 为了优化应用内存,你应该知道是什么消耗了你应用的大部分内存,答案就是Textu ...
最新文章
- 《图解HTTP》读书笔记--第2章简单的HTTP协议
- MySQL中的字符串连接
- tomcat web.xml配置
- P3700-[CQOI2017]小Q的表格【分块,欧拉函数】
- ERP产品销售发货判断库存功能(四十二)
- ftp服务器通常提供文件上传和,基于FTPClient的文件上传至Nginx服务器
- asp.net mvc bundle中数组超出索引
- WPF 框架开发 ColumnDefinition 和 RowDefinition 的代码在哪
- duet二重奏hp_Duet游戏安卓下载|Duet二重奏最新版下载v2.0.4-乐游网安卓下载
- 聚类分析用matlab还是spass,利用Matlab和SPSS软件实现聚类分析
- Spring JdbcTemplate声明式事务
- 使用node批量压缩图片
- 作文组装计算机,组装电脑作文200字
- 2022CTFSHOW菜狗杯部分MISC(二)
- 使用turtle 绘制正方形和圆
- etcd (一看就会)
- java p2p技术内幕.pdf_JavaP2P技术内幕
- 什么是示波器?示波器的使用方法图解
- TL431接线参数和几种应用
- UCML.NET开发平台 - 产品简介
热门文章
- Python Django 配置URL的方式(url传参方式)
- Java基础--内部类及匿名内部类
- Spring实现web开发的环境搭建
- 【超坑人的面试题】switch没有break
- 光盘在电脑上为什么放不出来_铁砂掌这么厉害,为什么上擂台用不出来
- 1.2.2 OSI参考模型(应用层、表示层、会话层、传输层、网络层、数据链路层、物理层)
- scrcpy设置快捷键_电脑端scrcpy控制Android手机
- 操作系统原理 : 非连续的内存分配,分段,页表
- 算法练习day14——190402(贪心:切金条、做项目、会议室安排)
- Ubuntu中update-alternatives命令(版本切换)