下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

提高Cocos2D-X渲染效率的好帮手——CCSpriteBatchNode

作者:课课家教育     来源: http://www.kokojia.com点击数:1036发布时间: 2016-05-14 10:00:23

标签: Cocos2D-XCocos2D-X游戏开发Cocos2D-X渲染

  在游戏开发中我们常常会烦恼Cocos2d-x渲染效率不够高,而且有时容易出现卡顿的情况,这时我们应该怎么做呢?本篇教程即将为你介绍提高我们Cocos2D-X渲染效率的好方法。

  今天刚好有点时间,我介绍下CCSpriteBatchNode,以及如何利用它优化游戏渲染效率。

  在cocos2d-x 2.x 之后,大家都看到了左下角的FPS变成3行,多了两行数据:

  最上面一行是指的当前场景的渲染批次。(简单理解为需要渲染多少个贴图出来)

  中间一行是渲染每一帧需要的时间。

  最下行就是大家熟悉的FPS。

  CCSpriteBatchNode介绍:

  1、先说下渲染批次:这是游戏引擎中一个比较重要的优化指标,指的是一次渲染凋用。也就是说,渲染的次数越少,游戏的运行效率越高。

  2、CCSpriteBatchNode就是cocos2d-x为了降低渲染批次而建立的一个专门管理精灵的类。

  接下来我们来分别举例测试一下不使用CCSpriteBatchNode与使用了CCSpriteBatchNode的两个工程哪个渲染效率更高。

  举例介绍(不使用CCSpriteBatchNode):

  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);

  }

  效果图如下:

提高Cocos2D-X渲染效率的好帮手——CCSpriteBatchNode_Cocos2D-X_Cocos2D-X游戏开发_Cocos2D-X渲染_课课家

  上面的效果图可以看到,创建了1000个Icon到场景中,这是的FPS是22,渲染批次是1000次。

  2、使用CCSpriteBatchNode批量渲染,一次渲染就把所有的CCSprite绘制出来。大大降低渲染批次。

  举例介绍(使用CCSpriteBatchNode):

  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的时候,设置贴图的区域就可以了。

  好了,通过上述两个例子的比较我们明显能看出使用了CCSpriteBatchNode的工程渲染效率更高,本篇教程到这里就结束了,希望大家通过本篇教程能有所收获。

赞(17)
踩(4)
分享到:
华为认证网络工程师 HCIE直播课视频教程