zoukankan      html  css  js  c++  java
  • CCSpriteBatchNode 渲染

    原文地址: 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(暂且不考虑其他的精灵)
    
    1    for(int i = 0;i < 1000;++i){
    2     int x = arc4random()�0;
    3     int y = arc4random()d0;
    4     CCSprite* testIcon = CCSprite::create("Icon.png");
    5     testIcon->setPosition( ccp(x, y) );
    6     this->addChild(testIcon);
    7    }
    创建了1000个Icon到场景中,这是的FPS是22,渲染批次是1000次。
    2、使用CCSpriteBatchNode批量渲染,一次渲染就把所有的CCSprite绘制出来。大大降低渲染批次。
    举例介绍:
    1、使用CCSprite创建1000个Icon.png到场景中,但是这里利用了CCSpriteBatchNode批量渲染。这时的渲染批次、FPS如何呢?
    01    CCSpriteBatchNode* batchNode = CCSpriteBatchNode::create("Icon.png", 1000);
    02    batchNode->setPosition(CCPointZero);
    03    this->addChild(batchNode);
    04     
    05    for(int i = 0;i < 1000;++i){
    06     int x = arc4random()�0;
    07     int y = arc4random()d0;
    08     CCSprite* testIcon = CCSprite::createWithTexture(batchNode->getTexture());
    09     testIcon->setPosition( ccp(x, y) );
    10     batchNode->addChild(testIcon);
    11    }
    创建了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的时候,设置贴图的区域就可以了。
  • 相关阅读:
    聊聊简单又灵活的权限设计(RBAC)
    手把手搭建一个属于自己的在线 IDE
    聊一聊如何搭建高性能网站哪一些事
    一个老程序员的忠告:你这辈子输就输在以为靠技术就能生存下
    缓存提升性能的关键性手段
    python学习笔记1之-python简介及其环境安装
    聊一聊mycat数据库集群系列之双主双重实现
    mycat数据库集群系列之mycat读写分离安装配置
    mycat数据库集群系列之mysql主从同步设置
    mycat数据库集群系列之数据库多实例安装
  • 原文地址:https://www.cnblogs.com/jiackyan/p/3019884.html
Copyright © 2011-2022 走看看