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. effective C++中条款37:绝不又一次定义继承而来的缺省參数值

    virtual 函数会动态绑定,而virtual函数的缺省參数值是静态绑定的. 用一个base类型的指针p去指向一个derived类对象.通过p调用虚函数时,会动态绑定到实际所指对象中的函数:用一个d ...

  2. 劣质代码评析——《写给大家看的C语言书(第2版)》附录B之21点程序(八)

    [重构](续) 牌的表示: 一副牌有52张,可用一整数数组描述.但是由于在游戏过程中牌数在不断减少,所以用一表示剩余张数的整数和一整数数组共同描述.C99支持一种变量长度数组,但用在这里并没有什么特别 ...

  3. 数据库 之 E-R实体关系模型

    E-R图也称实体-联系图(Entity Relationship Diagram),提供了表示实体类型.属性和联系的方法,用来描述现实世界的概念模型. 1.表示方法 E-R是描述现实世界概念结构模型的 ...

  4. C++生成十字绣图案(二) 面向对象

    基本的十字绣线性生成中提供了判断下一步可以画的位置并且逐步生成的函数.以这些基本函数为基础,可以进行更多变化的图案设计. 为了方便的扩展,可以把线性生成写成一个类,以后的修改继承这个类. 头文件Bas ...

  5. Struts2(二)action的三种方式

    一.普通java类 package com.pb.web.action; /* * 创建普通的java类 */ public class HelloAction1 { public String ex ...

  6. jQuery(一)引入

    一.jQuery简介 jQuery是一个兼容多浏览器的javascript库,核心理念是write less,do more(写得更少,做得更多) 二.安装 2.1.下载 下载地址:http://jq ...

  7. Navicat如何直接修改表中数据?

    Navicat如何直接修改表中数据?

  8. 解压版MySQL安装后初始化root密码

    1: C:\Users\gechong>mysql

  9. el表达式 多条件判断

      el表达式 多条件判断 CreationTime--2018年9月13日08点59分 Author:Marydon 1.情景展示 ACCESS_ID == 'APP1039' 且 CARDTYPE ...

  10. 新浪微博api出现认证失败问题 (获取code字段值的问题)

    出现该提示的原因:`` - 说: (2015-10-30 18:06:14)回调地址不一致,`` - 说: (2015-10-30 18:07:38)请在编辑开发者信息中将网站地址和应用信息--高级信 ...