1,导致性能悲剧的写法:

class A:public CCNode{

public:

  A(){

    m_sprite=NULL;

    m_isDrawDebug=false;

  }

  virtual~A(){}

  bool init(){

    this->CCNode::init();

    //create m_sprite

    m_sprite=CCSprite::create();

    m_sprite->initWithFile("a.png");

    addChild(m_sprite);

    ....

    return true;

  }

  void draw(Renderer* renderer, const Mat4& transform, uint32_t transformFlags){

    _customCommand_drawDebug(_globalZOrder);

   _customCommand_drawDebug = CC_CALLBACK_0(A::onDrawDebug,this,transform, transformFlags);

  renderer->addCommand(&_customCommand_drawDebug);

  }

  void onDrawDebug(const Mat4 &transform, uint32_t transformFlags){

    if(m_isDrawDebug){

      //draw debug

      ...

    }

  }

public:

  CCSprite*m_sprite;

  bool m_isDrawDebug;

  CustomCommand _customCommand_drawDebug;

};

上面写法,无论m_isDrawDebug是true还是false,如果场景中加1000个对象a,drawCall数量为1000。

2,不损失性能的写法:

class A:public CCNode{

public:

  A(){

    m_sprite=NULL;

    m_isDrawDebug=false;

  }

  virtual~A(){}

  bool init(){

    this->CCNode::init();

    //create m_sprite

    m_sprite=CCSprite::create();

    m_sprite->initWithFile("a.png");

    addChild(m_sprite);

    ....

    return true;

  }

  void draw(Renderer* renderer, const Mat4& transform, uint32_t transformFlags){

    if(m_isDrawDebug){

   _customCommand_drawDebug(_globalZOrder);

   _customCommand_drawDebug = CC_CALLBACK_0(A::onDrawDebug,this,transform, transformFlags);

  renderer->addCommand(&_customCommand_drawDebug);

  }

   }

  void onDrawDebug(const Mat4 &transform, uint32_t transformFlags){

    //draw debug

    ...

  }

public:

  CCSprite*m_sprite;

  bool m_isDrawDebug;

  CustomCommand _customCommand_drawDebug;

};

上面写法当m_isDrawDebug为false时,如果场景中加1000个对象a,则drawCall数量为1。

cocos2dx 3.x避免空customCommand的更多相关文章

  1. cocos2dx 3.x 避免空sprite

    由于cocos2dx 3.x中autobatch的,如果场景中含有空sprite(并且还不处于visible==false状态)的话,则会打断流水线(因为空sprite的贴图与其它元素的贴图必定不在同 ...

  2. Cocos2dx源码赏析(2)之渲染

    Cocos2dx源码赏析(2)之渲染 这篇,继续从源码的角度来跟踪下Cocos2dx引擎的渲染过程,以此来梳理下Cocos2dx引擎是如何将精灵等元素显示在屏幕上的. 从上一篇对Cocos2dx启动流 ...

  3. 基于Cocos2d-x学习OpenGL ES 2.0系列——OpenGL ES渲染之LayerColor(8)

    在前面文章中讲述了Cocos2d-x引擎OpenGL渲染准备Shader方面,本文主要讲解使用LayerColor来讲述OpenGL的渲染过程. 1.LayerColor对象创建 添加LayerCol ...

  4. cocos2D-X从的源代码的分析cocos2D-X学习OpenGL(1)----cocos2D-X渲染架构

     个人原创.欢迎转载,转载请注明原文地址http://blog.csdn.net/bill_man 从本篇文章開始,将分析cocos2D-X 3.0源码,第一部分是从cocos2D-X学习OpenGL ...

  5. 我所理解的Cocos2d-x

    我所理解的Cocos2d-x(完全基于Cocos2d-x3.0,深度剖析计算机图形学,OpenGL ES及游戏引擎架构,全面提升游戏开发相关知识) 秦春林 著   ISBN 978-7-121-246 ...

  6. Cocos2d-x 3.2 学习笔记(四)学习打包Android平台APK!

    从cocos2dx 3.2项目打包成apk安卓应用文件,搭建安卓环境的步骤有点繁琐,但搭建一次之后,以后就会非常快捷! (涉及到3.1.1版本的,请自动对应3.2版本,3.x版本的环境搭建都是一样的) ...

  7. Cocos2d-x 3.2学习笔记(三)学习绘图API

    关于cocos2d-x 3.2 版本的绘图方法有两种 1.使用DrawNode类绘制自定义图形. 2.继承Layer类重写draw()方法. 以上两种方法都可以绘制自定义图形,根据自己的需要选择合适的 ...

  8. [cocos2d-x]深入--几个代表性的类

    摘要: 此文对cocos2d-x引擎中最具代表性,最能体现框架结构的几个类做了简单的介绍, 包括Director,Application, Renderer, EventDispatcher, Sch ...

  9. 学习cocos 空程序

    今天开始学习cocos代码,首先研究源码中的空程序. 在这个程序中,在main函数中,创建了一个Application: int APIENTRY _tWinMain(HINSTANCE hInsta ...

随机推荐

  1. 解决Sublime包管理package control 报错 There are no packages available for installation

    解决Sublime包管理package control 报错 There are no packages available for installation 真的是哔了狗了,要不是我机智的重新安装了 ...

  2. Pinger2

    import java.io.IOException;import java.io.InputStreamReader;import java.io.LineNumberReader;import j ...

  3. 直接修改class文件内容即使是文本会导致App异常,正确方式是修改java再用生成的class替换掉原有的class

    前几天来了个小任务,把某项目中某人的邮件地址改了下. 由于对项目不熟悉,于是采用find方式找出app中所有包含某人邮件地址的文件都找出来了. xml,properties大约三四个,还有两个clas ...

  4. 最新phpstudy2016安装教程及流程

    最新phpstudy2016安装教程及流程,帮助站长快速搭建网站服务器平台! phpstudy软件简介 该程序包集成最新的Apache+Nginx+LightTPD+PHP+MySQL+phpMyAd ...

  5. Linux下时间格式转换及获取方法

    Linux下使用clock_gettime给程序计时 #include <stdio.h> #include <unistd.h> #include <stdlib.h& ...

  6. linux 用户管理,用户权限管理,用户组管理

    linux 用户管理,用户权限管理,用户组管理 一:ls -l 命令 解释 第个d表示是目录,如果是文件是-,如果是连接是l 第2到4个 rwx 表示创建者的操作权限 r 读,w 写,x 执行 第5到 ...

  7. iPhone调用ffmpeg2.0.2解码h264视频的示例代码

    iPhone调用ffmpeg2.0.2解码h264视频的示例代码 h264demo.zip 关于怎么在MAC下编译iOS下的ffmpeg请看 编译最新ffmpeg2.0.1(ffmpeg2.0.2)到 ...

  8. OSX: SSH密钥使用日记(1)

    大家都知道,一个悠久的历史故事,使用SSH密钥对就可以不用密码登陆远程计算机.经典资料也是不少,不过那些资料对新学者可是有点太不象人话了,不好理解.所以本文试图用更人性一点的语言解释,并演示如何在Ma ...

  9. RTT下spi flash+elm fat文件系统移植小记

    背景: MCU:STM32F207 SPI flash: Winbond W25Q16BV OS: RTT V1.1.1 bsp: STM32F20x 1 将spi_core.c,spi_dev.c及 ...

  10. CSS nth-child、first-child、last-child、nth-of-type、first-of-type和last-of-type选择器使用

    以下示例主要讲解nth-child.first-child.last-child.nth-of-type.first-of-type和last-of-type使用. 示例代码: <!DOCTYP ...