批处理精灵节点用于精灵数目很多的时候,使用批处理的方式可以降低渲染次数,提高效率,当然,当精灵数目较小的时候是没有必要使用批处理的
bool T02Layers ::init()
{
if (! CCLayer::init())
{
return false;
}
CCSize winSize = CCDirector::sharedDirector()->getWinSize();
CCPoint ptCenter = ccp(winSize.width / 2, winSize.height / 2);
/*
CCSpriteBatchNode也是一个容器,但是它只能包容CCSprite对象,而且要求这些精灵来自同一个纹理
*/
CCSpriteBatchNode* batch = CCSpriteBatchNode ::create("CloseNormal.png" );
addChild(batch);
_batch = batch;
CCSprite* sprite = CCSprite::createWithTexture(batch->getTexture());
batch->addChild(sprite);
sprite->setPosition(ptCenter);
setTouchEnabled( true);
setTouchMode( kCCTouchesOneByOne);
return true;
}
bool T02Layers ::ccTouchBegan(CCTouch* touch, CCEvent*)
{
CCSize winSize = CCDirector::sharedDirector()->getWinSize();
for ( int i = 0; i < 1000; i++)
{
CCSprite* sprite = CCSprite::createWithTexture(_batch->getTexture());
_batch->addChild(sprite);
//CCRANDOM_0_1 () 用于产生0到1之间的随机数字,是定义的宏
sprite->setPosition( ccp( CCRANDOM_0_1()*winSize.width, CCRANDOM_0_1()* winSize.height));
}
return true;
}
结果:
如果不使用批处理:
三行数字,第一行表示精灵的渲染次数 第三行表示1s中帧循环次数也就是刷新次数。