cocos2d-x学习笔记(21)--CCSpriteBatchNode

cocos2d-x学习笔记(21)--CCSpriteBatchNode

本文出自https://shuwoom.com博客,欢迎访问!

注意:从cocos2d-x学习笔记(21)开始我使用的cocos2d-x版本是2.0.2,而之前一直使用的版本是1.0。2.0.2版本修复了很多的bug,(其中包括CCTMXLayer使用addChild函数时出问题的bug)。由于两版本之间有一些差异,这可能会造成大家阅读上的一些不便,在这里我向各位道歉,希望大家能多留意一下不同点,之后我会对之前的文章进行修改,批注上2.0.2版本的使用方法...........................

 

本文参考了:http://blog.csdn.net/kmyhy/article/details/6387190和http://blog.csdn.net/xiaominghimi/article/details/6761811内容

 

我们在添加精灵对象时,都是经过准备、渲染和清除阶段。在之前的内容中,我们使用得最多的添加精灵的方法是调用addChild()函数添加。但是,如果在增加大量的精灵对象时,使用这个方法就会就会使得每秒帧数下降很多,影响了游戏的流畅度。下面就以具体的例子来说明:

 

CCSprite* sprite1 = CCSPrite::create("sprite1.png");
addChild(sprite1);
CCSprite* sprite2 = CCSPrite::create("sprite2.png");
addChild(sprite2);
CCSprite *sprite3 = CCSPrite::create("sprite3.png");
addChild(sprite3);
...
...
CCSprite* sprite100 = CCSPrite::create("sprite100.png");
addChild(sprite100);

这一个例子就是我们最常用的方法,这个方法整个过程为:{准备、渲染、清除}、{准备、渲染、清除}、{准备、渲染、清除}、{准备、渲染、清除}................{准备、渲染、清除}一直重复100次为止。从中我们可以发现,其实准备和清除这两个过程只需要个一次就足够了,剩下得就是渲染100次。下面的使用方法就解决了这个问题:

 

CCSpriteBatchNode* batch = CCSpriteBatchNode::create("sprites.png");
addChild(batch, 0, kTagBatch);

CCArray* array = CCArray::create();
for(int i=0; i<100; i++)
{
CCSprite *sprite = CCSprite::createWithTexture(batch->getTexture(), CCRectMake( 50*i,0,50, 50));
array->addObject(sprite);
batch->addChild(sprite, i);//注意这里,所有的sprite都在同一个z轴上
}

这种使用方法整个过程为:准备、渲染100次、清除,其中省去了很多次重复的准备和清除过程,使得效率大大地提升。我们加载的图片是一个图片集,就像下面的图片:

我们只要在createWithTexture中设置CCRectMake的参数即可,注意图中每一个角色的大小都必须一样。

 

但是使用CCSpriteBatchNode意味着所有的精灵对象都在batch的同一个z轴上,这是一个约束。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值