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()调用一次,这是我看测试发现了,如果有解释不合理或者不正确的地方希望大家能指正批评。

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

EDA与VHDL作业(2)

(唉呀,这样的记录,好无聊啊,以后多记录点代码吧) **1.VHDL中有哪三种数据对象,详细说明它们的功能特点以及使用方法,举例说明数据对象与数据类型的关系** ***1、常数*** 常数的定义就是...
  • happy_fb
  • happy_fb
  • 2017年09月12日 21:35
  • 415

多种sock_raw的特点和使用方法

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

ASP的技术特点与使用方法

ASP的技术特点与使用方法 几年以前,业界在动态主页发布方面唯一的渠道是CGI(Common Ga teway Interface) 模式。随后出现的 ISAPI、NSAPI和JDBC等技术方案虽较...
  • bpvwj
  • bpvwj
  • 2014年05月18日 21:11
  • 271

ATL的特点与基本使用方法

ATL(Active Template Library)活动模板库 是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。通过活动模板库,可以建立COM组件,然后通过ASP页...
  • ceshi986745
  • ceshi986745
  • 2016年06月20日 11:14
  • 1636

匿名管道详解与使用

一、概念 进程间通信是在不同进程间传播或者交换消息。管道,也就是匿名管道,是linux系统下最常见的进程间通信方式之一,它是在两个进程间实现一个数据流通的通道,优点:简单易用;缺点:功能简单。 管...
  • u010951938
  • u010951938
  • 2015年05月15日 13:41
  • 429

精灵批处理类CCSpriteBatchNode

当你需要显示两个或两个以上相同的精灵时,如果逐个渲染精灵,每一次渲染都会调用OpenGL的函数,因为当系统在屏幕上渲染一张贴图的时候,图形处理硬件必须首先准备渲染,然后渲染图形,最后完成渲染以后的清理...
  • wcjwdq
  • wcjwdq
  • 2013年11月02日 21:20
  • 512

CCSpriteBatchNode提高渲染效率

利用texturepacker打包工具,把要用到的图打包成一张大图,在cocos2dx中通过CCSpriteBatchNode进行渲染,能提高效率。下面直接上代码: bool HelloWorld::...
  • u011922261
  • u011922261
  • 2014年03月12日 15:37
  • 799

精灵批处理类CCSpriteBatchNode

精灵批处理类CCSpriteBatchNode 当你需要显示两个或两个以上相同的精灵时,如果逐个渲染精灵,每一次渲染都会调用OpenGL的函数,因为当系统在屏幕上渲染一张贴图的时候,图形处理硬件...
  • YUZHIBOYI
  • YUZHIBOYI
  • 2014年08月19日 20:47
  • 5184

CCSpriteBatchNode提高渲染效率的用法

原文地址: http://www.cocos2dev.com/?p=331 以前写过一个游戏中的天气系统,今天有人说我的天气系统有点卡,不是很好用。我看下了他的代码,发现他改了我的代码,把CCS...
  • a402813378
  • a402813378
  • 2013年09月04日 16:16
  • 417

什么是H5?有哪些特点?

H5是指第5代HTML(超文本标记语言),也指用H5语言制作的一切数字产品。 网上的网页,多数都是由HTML写成的。 “超文本”是指页面内可以包含图片、链接,甚至音乐、程序等非文字元素。 而“标...
  • liantingwqn
  • liantingwqn
  • 2016年10月24日 11:33
  • 2939
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:CCSpriteBatchNode的特点和使用方法
举报原因:
原因补充:

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