CCSpriteBatchNode的特点和使用方法

原创 2013年12月04日 20:15:26

CCSpriteBatchNode是一个批处理绘制精灵节点,其特点是共享同一个纹理,CCSpriteBatchNode最大的优点就是将所有同属性的纹理进行一次绘制,CCSpriteBatchNode并不能添加CCLabel之类(继承自CCNode的节点),仅处理共享纹理的精灵。另外一点特别要注意的是CCSpriteBatchNode通过addSpriteWithoutQuad增加子节点的方式跟其他addChild的方式不太一样的地方就是,CCSpriteBatchNode在调用addChild之后需要其子节点调用release()节点,减少一次引用计数,其原因如下:

咱们先看看CCSpriteBatchNode增加子节点的源代码,

CCSpriteBatchNode * CCSpriteBatchNode::addSpriteWithoutQuad(CCSprite*child, unsigned int z, int aTag)
{
    CCAssert( child != NULL, "Argument must be non-NULL");
    CCAssert( dynamic_cast<CCSprite*>(child), "CCSpriteBatchNode only supports CCSprites as children");


    // quad index is Z
    child->setAtlasIndex(z);


    // XXX: optimize with a binary search
    int i=0;
 
    CCObject* pObject = NULL;
    CCARRAY_FOREACH(m_pobDescendants, pObject)
    {
        CCSprite* pChild = (CCSprite*) pObject;
        if (pChild && (pChild->getAtlasIndex() >= z))
        {
            ++i;
        }
    }
    
    m_pobDescendants->insertObject(child, i);//对子节点引用计数一次


    // IMPORTANT: Call super, and not self. Avoid adding it to the texture atlas array
    CCNode::addChild(child, z, aTag);//调用基类的接口,增加子节点,对子节点引用计数一次
    //#issue 1262 don't use lazy sorting, tiles are added as quads not as sprites, so sprites need to be added in order
    reorderBatch(false);


    return this;
}

从代码注释的地方看到,节点被引用计数了两次。为了避免内存泄露,需要将子节点release()调用一次,这是我看测试发现了,如果有解释不合理或者不正确的地方希望大家能指正批评。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

cocos2d - CCSpriteBatchNode的使用

有点:CCSpriteBatchNode 中的所有CCSprite只会被渲染1次,因此可以提高游戏的FPS。 限制:加入到 CCSpriteBatchNode 中的CCSprite必须使用同一张纹理...

【cocos2dx 3.x】CCSpriteBatchNode

之前我们简单地介绍了一下自定义一个精灵,使其在初始化的时候即实现动画,并利用了纹理图册精简代码,今天我们着重介绍一下CCSpriteBatchNode,这是一个相当重要的概念,游戏开发不像应用,大量的...

cocos2dx进阶学习之CCSpriteBatchNode

继承关系CCSpriteBatchNode -> CCNode, CCTextureProtocol成员变量inline CCTextureAtlas* getTextureAtlas(void)in...

Cocos2d-x利用CCSpriteBatchNode提高渲染效率

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

ATL与COM之间的关系、ATL的特点与基本使用方法

ATL,Active Template Library活动模板库 是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。通过活动模板库,可以建立COM组件,然后通过ASP...
  • dy106
  • dy106
  • 2013-08-21 09:52
  • 575

ATL与COM之间的关系、ATL的特点与基本使用方法

ATL,Active Template Library活动模板库 是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。通过活动模板库,可以建立COM组件,然后通过ASP...

多种sock_raw的特点和使用方法

http://baike.haosou.com/doc/3867117-4059824.html (注意一定要在root下使用)原始套接字编程可以接收到本机网卡上的数据帧或者数据包,对与监听网络的流量...

ATL与COM之间的关系、ATL的特点与基本使用方法

ATL,Active Template Library活动模板库 是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。通过活动模板库,可以建立COM组件,然后通过ASP...

cocos2d中的图片使用(CCSpriteBatchNode)

转载自:http://hi.baidu.com/amigoradio/blog/item/10441f0974360598d0581b44.html 最先接触到的是CCSprite,就是一张图片...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)