cocos2d-x中CCSpriteBatchNode使用注意
来源:互联网 发布:mac连不上app store 编辑:程序博客网 时间:2024/05/16 01:11
优点:
CCSpriteBatchNode中的所有CCSprite只会被渲染1次,因此可以提高游戏的FPS。
限制条件:
1. 加入到 CCSpriteBatchNode 中的CCSprite必须使用同一张纹理图。
2. CCSprite之前没有加入其它节点,也就是没有父节点。
下面文章转载:
原文地址: http://www.cocos2dev.com/?p=331
以前写过一个游戏中的天气系统,今天有人说我的天气系统有点卡,不是很好用。我看下了他的代码,发现他改了我的代码,把CCSpriteBatchNode删除了,直接用addChild,每个sprite都是重新读取的贴图。
我想说,同学呀,你把暴风雪所有特效开启后,你有没有注意下你的游戏场景显示了1000多渲染批次。这能不卡吗?
今天刚好有点时间,我介绍下CCSpriteBatchNode,以及利用它优化游戏渲染效率。
在cocos2d-x 2.x 之后,大家都看到了左下角的FPS变成3行,多了两行数据。
最上面一行是指的当前场景的渲染批次。(简单理解为需要渲染多少个贴图出来)
中间一行是渲染每一帧需要的时间。
最下行就是大家熟悉的FPS。
CCSpriteBatchNode介绍:
1、先说下渲染批次:这是游戏引擎中一个比较重要的优化指标,指的是一次渲染凋用。也就是说,渲染的次数越少,游戏的运行效率越高。
2、CCSpriteBatchNode就是cocos2d-x为了降低渲染批次而建立的一个专门管理精灵的类。
举例介绍:
1、使用CCSprite创建1000个Icon.png到场景中,这样渲染批次就是1000(暂且不考虑其他的精灵)
for
(
int
i = 0;i < 1000;++i){
int
x = arc4random()%960;
int
y = arc4random()%640;
CCSprite* testIcon = CCSprite::create(
"Icon.png"
);
testIcon->setPosition( ccp(x, y) );
this
->addChild(testIcon);
}
效果图如下:
上面的效果图可以看到,创建了1000个Icon到场景中,这是的FPS是22,渲染批次是1000次。
2、使用CCSpriteBatchNode批量渲染,一次渲染就把所有的CCSprite绘制出来。大大降低渲染批次。
举例介绍:
1、使用CCSprite创建1000个Icon.png到场景中,但是这里利用了CCSpriteBatchNode批量渲染。这时的渲染批次、FPS如何呢?
CCSpriteBatchNode* batchNode = CCSpriteBatchNode::create(
"Icon.png"
, 1000);
batchNode->setPosition(CCPointZero);
this
->addChild(batchNode);
for
(
int
i = 0;i < 1000;++i){
int
x = arc4random()%960;
int
y = arc4random()%640;
CCSprite* testIcon = CCSprite::createWithTexture(batchNode->getTexture());
testIcon->setPosition( ccp(x, y) );
batchNode->addChild(testIcon);
}
效果图如下:
上面的效果图可以看到,创建了1000个Icon到场景中,这是的FPS是39.9,渲染批次是1次。
注:
1、
CCSpriteBatchNode::create(const char *fileImage);//利用贴图创建,默认子节点数量29.(数量不够时,系统会自己增加)
CCSpriteBatchNode* batchNode = CCSpriteBatchNode::create(const char *fileImage, unsigned int capacity);//利用贴图创建,并指定子节点数量
2、
使用CCSpriteBatchNode时,所使用的贴图必须是同一张图片,也不能指定精灵的深度。所有的精灵都必须在同一渲染层。
3、
但是项目中总不可能局限于一张贴图上,所以你可以把多张贴图合并成一张大贴图(合并的工具很多,我不介绍了)。所以利用合成后的大贴图创建一个CCSpriteBatchNode。
然后创建CCSprite的时候,设置贴图的区域就可以了。
- cocos2d-x中CCSpriteBatchNode使用注意
- cocos2d -x 精灵集合CCSpriteBatchNode的使用
- Cocos2d-x-CCSpriteBatchNode
- cocos2d - CCSpriteBatchNode的使用
- cocos2d - CCSpriteBatchNode的使用
- cocos2d - CCSpriteBatchNode的使用
- cocos2d中的图片使用(CCSpriteBatchNode)
- [cocos2d-x] CCArray使用注意
- cocos2d-x CCArray使用注意
- cocos2d-x CCArray使用注意
- cocos2d-x 中使用加减定位后的注意问题
- cocos2d-x 代码中使用 std::to_string 要注意!
- cocos2d-x学习笔记(21)--CCSpriteBatchNode
- Cocos2d-x利用CCSpriteBatchNode提高渲染效率
- Cocos2d-x利用CCSpriteBatchNode提高渲染效率
- cocos2d-x之 CCSpriteBatchNode 用法总结
- Cocos2d-x 利用CCSpriteBatchNode提高渲染效率
- cocos2d-x 动画详解之二CCSpriteBatchNode
- 最长递增子序列问题的求解(LIS)
- 自动ssh登录的几种方法
- Qt VS2010 编译static版本
- 第63天的交易(2013-7-4)(-100)(-353.69)
- 交叉线、直通线、反转线的区别与应用
- cocos2d-x中CCSpriteBatchNode使用注意
- 《C专家编程》读书笔记
- 一个简单的线程池实现
- Spring jar包详解
- 虚拟wifi教程
- 三大虚拟化软件比较
- generic_netlink_howto
- Box2D物理引擎介绍
- POJ-1953-World Cup Noise