@H_404_0@ 以前写过一个游戏中的天气系统,今天有人说我的天气系统有点卡,不是很好用。我看下了他的代码,发现他改了我的代码,把CCSpriteBatchNode删除了,直接用addChild,每个sprite都是重新读取的贴图。 @H_404_0@
@H_404_0@ 我想说,同学呀,你把暴风雪所有特效开启后,你有没有注意下你的游戏场景显示了1000多渲染批次。这能不卡吗? @H_404_0@
@H_404_0@ 今天刚好有点时间,我介绍下CCSpriteBatchNode,以及利用它优化游戏渲染效率。 @H_404_0@
@H_404_0@ 在cocos2d-x 2.x 之后,大家都看到了左下角的FPS变成3行,多了两行数据。 @H_404_0@ 最上面一行是指的当前场景的渲染批次。(简单理解为需要渲染多少个贴图出来) @H_404_0@ 中间一行是渲染每一帧需要的时间。 @H_404_0@ 最下行就是大家熟悉的FPS。 @H_404_0@
@H_404_0@ CCSpriteBatchNode介绍: @H_404_0@
@H_404_0@ 1、先说下渲染批次:这是游戏引擎中一个比较重要的优化指标,指的是一次渲染凋用。也就是说,渲染的次数越少,游戏的运行效率越高。 @H_404_0@ 2、CCSpriteBatchNode就是cocos2d-x为了降低渲染批次而建立的一个专门管理精灵的类。 @H_404_0@
@H_404_0@ 举例介绍: 1、使用CCSprite创建1000个Icon.png到场景中,这样渲染批次就是1000(暂且不考虑其他的精灵)
- for(inti=0;i<1000;++i){
- intx=arc4random()%960;
- inty=arc4random()%640;
- CCSprite*testIcon=CCSprite::create("Icon.png");
- testIcon->setPosition(ccp(x,y));
- addChild(testIcon);
- }
效果图如下:
@H_404_0@ 上面的效果图可以看到,创建了1000个Icon到场景中,这是的FPS是22,渲染批次是1000次。 @H_404_0@
@H_404_0@ 2、使用CCSpriteBatchNode批量渲染,一次渲染就把所有的CCSprite绘制出来。大大降低渲染批次。 @H_404_0@
@H_404_0@ 举例介绍: @H_404_0@ 1、使用CCSprite创建1000个Icon.png到场景中,但是这里利用了CCSpriteBatchNode批量渲染。这时的渲染批次、FPS如何呢?
copy