CCSpriteBatchNode的使用
2014-03-06 14:16
225 查看
研究了一下CCSpriteBatchNode,说一下个人理解。
我们通常对精灵添加的屏幕的步骤是创建精灵,添加到屏幕。现在我们使用了CCSpriteBatchNode以后,
精灵的添加是首先创建精灵,然后将精灵添加到CCSpriteBatchNode上面去,最后再将CCSpriteBatchNode里面的众多精灵一次性的绘制到屏幕上面。
这样就减少了渲染次数,提高了帧率。不过需要注意的是:添加进batchNode里面的精灵,都是要在CCSpriteBatchNode中是可以找到的
如下面的代码:
上面的代码就是batchNode中因为存在icon.png这个图片,所以是icon.png的sprite可以添加到这个batchNode里面去
如果你添加其它图片到batchNode里面去的话,直接报错,程序挂了。
但是我们怎么样才能添加多张不同图片的精灵到Sprite里面呢?
可以通过CCSpriteFrameCache将TP打包的多张图片读入内存,这样就可以解决上面那个需求了。
如下代码:
上面的代码在屏幕上只绘制1次。不像我们创建精灵直接绘制到屏幕上那样,创建几个精灵添加到屏幕上就需要绘制几次。假如上面的代码没有使用CCSpriteBatchNode,而是直接创建精灵添加到CCLayer上的话,我们的绘制次数是2、
当我们在屏幕上绘制几千个精灵时,这种使用batchNode的好处就可以体现了。
可以把CCSpriteBatchNode想像成一个Layer(绘制到真正CCLayer屏幕之前的缓冲层Layer),关于精灵叠放层次的调整是在添加到batchNode上时调整的,调整好以后,就可以再将这一张batchNode整个绘制到CCLayer屏幕上面。
所以我们不能在将batchNode添加到真正的层时,再来调整精灵的层次结构,这时已经迟了。
我们通常对精灵添加的屏幕的步骤是创建精灵,添加到屏幕。现在我们使用了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添加到真正的层时,再来调整精灵的层次结构,这时已经迟了。
相关文章推荐
- 使用CCSpriteBatchNode实现动画效果
- iphone游戏开发之cocos2d( 十一 )使用CCSpriteBatchNode和纹理图册,提高精灵动画效率;
- 使用CCSpriteBatchNode实现动画效果
- CCSpriteBatchNode的作用,使用
- cocos2dx打飞机项目笔记五:CCSpriteBatchNode 的使用
- 【爱上cocos2d-x之八】使用CCSpriteBatchNode优化绘制一批相同的精灵
- cocos2dx2.x使用CCSpriteBatchNode不显示
- [Cocos2d-x]CCSpriteBatchNode的使用
- CCSpriteBatchNode的特点和使用方法
- CCSpriteBatchNode 的使用
- CCSpriteBatchNode使用限制
- cocos2d: 使用TexturePacker , pvr.ccz, CCSpriteBatchNode, CCSpriteFrameCache
- CCSpriteBatchNode中存放元素的一点理解
- 【iOS-Cocos2d游戏开发之九】讲解CCSpriteBatchNode与TP工具的".pvr.ccz",".plist"共用的终极精灵优化及注意事项!
- cocos2d-x 详解之 CCSprite(精灵)- “CCSpriteBatchNode”和“CCSpriteFrameCache”
- Cocos2d-x 利用CCSpriteBatchNode提高渲染效率
- CCSpriteBatchNode提高渲染效率
- CCSpriteBatchNode中设置zOrder的问题
- cocos2d-x 详解之 CCSprite(精灵)- “CCSpriteBatchNode”和“CCSpriteFrameCache”
- Cocos2d-x 利用CCSpriteBatchNode建立子弹池