zoukankan      html  css  js  c++  java
  • cocos2dx 3.x避免空customCommand

    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。

  • 相关阅读:
    有关Java2的一些菜鸟疑问
    项目杂记——在后台获取Repeater控件里面的控件
    项目杂记——ASP.net js传参之绑定字段做参数
    项目杂记——超链接里传参
    算法基础 (插入排序、合并排序算法)
    软考操作系统习题分析与总结(一)
    Java中thread类与Runnable接口的区别
    DropDownList绑定中午(列名无效)
    struts 和servlet的关系
    Struts2客户端请求过程
  • 原文地址:https://www.cnblogs.com/wantnon/p/4249914.html
Copyright © 2011-2022 走看看