CCSpriteBatchNode
2014-04-18 17:31
471 查看
cocos2d-x学习笔记(21)--CCSpriteBatchNode
注意:从cocos2d-x学习笔记(21)开始我使用的cocos2d-x版本是2.0.2,而之前一直使用的版本是1.0。2.0.2版本修复了很多的bug,(其中包括CCTMXLayer使用addChild函数时出问题的bug)。由于两版本之间有一些差异,这可能会造成大家阅读上的一些不便,在这里我向各位道歉,希望大家能多留意一下不同点,之后我会对之前的文章进行修改,批注上2.0.2版本的使用方法...........................
原文地址:http://www.2cto.com/kf/201209/154686.html
我们在添加精灵对象时,都是经过准备、渲染和清除阶段。在之前的内容中,我们使用得最多的添加精灵的方法是调用addChild()函数添加。但是,如果在增加大量的精灵对象时,使用这个方法就会就会使得每秒帧数下降很多,影响了游戏的流畅度。下面就以具体的例子来说明:
[html]
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次。下面的使用方法就解决了这个问题:
[html]
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轴上,这是一个约束。
注意:从cocos2d-x学习笔记(21)开始我使用的cocos2d-x版本是2.0.2,而之前一直使用的版本是1.0。2.0.2版本修复了很多的bug,(其中包括CCTMXLayer使用addChild函数时出问题的bug)。由于两版本之间有一些差异,这可能会造成大家阅读上的一些不便,在这里我向各位道歉,希望大家能多留意一下不同点,之后我会对之前的文章进行修改,批注上2.0.2版本的使用方法...........................
原文地址:http://www.2cto.com/kf/201209/154686.html
我们在添加精灵对象时,都是经过准备、渲染和清除阶段。在之前的内容中,我们使用得最多的添加精灵的方法是调用addChild()函数添加。但是,如果在增加大量的精灵对象时,使用这个方法就会就会使得每秒帧数下降很多,影响了游戏的流畅度。下面就以具体的例子来说明:
[html]
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次。下面的使用方法就解决了这个问题:
[html]
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轴上,这是一个约束。
相关文章推荐
- 【iOS-Cocos2d游戏开发之九】讲解CCSpriteBatchNode与TP工具的".pvr.ccz",".plist"共用的终极精灵优化及注意事项!
- Cocos2d-x利用CCSpriteBatchNode提高渲染效率
- 预加载+CCSpriteBatchNode + CCSpriteFrameCache
- [cocos2d-x]用CCSpriteBatchNode进行文理贴图的优化
- 【Cocos2d游戏开发之九】讲解CCSpriteBatchNode与TP工具的".pvr.ccz",".plist"共用的终极精灵优化及注意事项!
- 我的Cocos2d-x学习笔记(八)利用CCSpriteBatchNode进行优化
- Cocos2d-x利用CCSpriteBatchNode提高渲染效率
- CCSpriteBatchNode使用限制
- cocos2d-x之 CCSpriteBatchNode 用法总结
- Cocos2d-x 利用CCSpriteBatchNode建立子弹池
- cocos2d-x CCSpriteBatchNode和CCSpriteFrameCache区别
- Cocos2d-X 学习笔记 20 利用CCSpriteBatchNode提高渲染效率
- Cocos2d-x利用CCSpriteBatchNode提高渲染效率
- [cocos2d-x]用CCSpriteBatchNode进行文理贴图的优化
- iOS开发之Cocos2d-x——CCSpriteBatchNode介绍(提高渲染效率) 推荐
- 【iOS-Cocos2d游戏开发之九】讲解CCSpriteBatchNode与TP工具的".pvr.ccz",".plist"共用的终极精灵优化及注意事项!
- 我的Cocos2d-x学习笔记(八)利用CCSpriteBatchNode进行优化
- 使用CCSpriteBatchNode实现动画效果
- Cocos2d-x利用CCSpriteBatchNode提高渲染效率
- 【cocos2dx 3.x】CCSpriteBatchNode