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。

  • 相关阅读:
    16. InOrder
    15. BddStyle: given-willReturn、OneLiner风格
    12. atLeastOnce、atLeast、atMost、never、only、verifyNoMoreInteractions、verifyZeroInteractions
    11. verify验证方法调用
    sqlserver数据文件变更位置
    生产上的sqlserver数据库误删或者操作不当的补救措施
    linux centos7 安装配置jdk
    linux centos7 mysql5.7 设置端口以及远程访问
    linux centos7 安装mysq5.7步骤总结
    关于Netty的那点事
  • 原文地址:https://www.cnblogs.com/wantnon/p/4249914.html
Copyright © 2011-2022 走看看