2014年2月3日 星期一

CCSpriteBatchNode 的基本method

來自http://blog.csdn.net/honghaier/article/details/7931914
只截取部分內容,方便使用時的參考資訊

class CC_DLL CCSpriteBatchNode : public CCNode, public CCTextureProtocol
 {
 public:
  //析构
  ~CCSpriteBatchNode();
 
  // 取得纹理图块顶点缓冲管理器。
  inline CCTextureAtlas* getTextureAtlas(void) { return m_pobTextureAtlas; }
  //设置纹理图块顶点缓冲管理器
  inline void setTextureAtlas(CCTextureAtlas* textureAtlas) 
  { 
   //如果当前使用的纹理图块顶点缓冲管理器与要设置的纹理图块顶点缓冲管理器不同,先释放原顶点缓冲管理器,再将当前使用的顶点缓冲管理器指针指向要设置顶点缓冲管理器。
   if (textureAtlas != m_pobTextureAtlas)
   {
    CC_SAFE_RETAIN(textureAtlas);
    CC_SAFE_RELEASE(m_pobTextureAtlas);
    m_pobTextureAtlas = textureAtlas;
   }
  }
  //取得存放所有使用此图块集的CCSprite指针数组
  inline CCArray* getDescendants(void) { return m_pobDescendants; }

  //静态函数:通过纹理指针按照默认的图块数量29创建一个CCSpriteBatch实例对象。注意:如果游戏运行中图块数量超过这个数值,则数量递增33%以满足需要

  static CCSpriteBatchNode* batchNodeWithTexture(CCTexture2D *tex);

  //静态函数:通过纹理指针按照设定的图块数量创建一个CCSpriteBatch实例对象。 
  static CCSpriteBatchNode* batchNodeWithTexture(CCTexture2D* tex, unsigned int capacity);

  //静态函数:通过图片名称按照默认的图块数量29创建一个CCSpriteBatch实例对象。
  static CCSpriteBatchNode* batchNodeWithFile(const char* fileImage);

  //静态函数:通过图片名称按照设定的图块数量创建一个CCSpriteBatch实例对象。 
  static CCSpriteBatchNode* batchNodeWithFile(const char* fileImage, unsigned int capacity);

  //通过纹理指针和图块数量进行初始化。
  bool initWithTexture(CCTexture2D *tex, unsigned int capacity);
  //通过图片名称和图块数量进行初始化。
  bool initWithFile(const char* fileImage, unsigned int capacity);
  
  //扩容,递增1/3的图块数量
  void increaseAtlasCapacity();

  //通过索引移除一个子结点,参数doCleanUp决定移除的同时是否对其进行释放。
  void removeChildAtIndex(unsigned int index, bool doCleanup);
  //将一个指定的CCSprite指针插入到子节点指针数组的指定位置
  void insertChild(CCSprite *child, unsigned int index);
  //移除一个指定的CCSprite指针
  void removeSpriteFromAtlas(CCSprite *sprite);
  //重新构建指定的CCSprite指针下的所有子结点的索引
  unsigned int rebuildIndexInOrder(CCSprite *parent, unsigned int index);
  //取得指定CCSprite的所有节点的最大图块索引
  unsigned int highestAtlasIndexInChild(CCSprite *sprite);
  //取得指定CCSprite的所有节点的最小图块索引
  unsigned int lowestAtlasIndexInChild(CCSprite *sprite);
  //取得指定CCSprite的Z顺序之上或之下的最近的图块索引
  unsigned int atlasIndexForChild(CCSprite *sprite, int z);
  
  // 实现CCTextureProtocol的接口函数
  // 取得纹理
     virtual CCTexture2D* getTexture(void);
  // 设置纹理
     virtual void setTexture(CCTexture2D *texture);
  //为纹理设置使用的混合状态
     virtual void setBlendFunc(ccBlendFunc blendFunc);
  //取得混合状态
     virtual ccBlendFunc getBlendFunc(void);

  //重载CCNode的相关函数
  //每一帧要被调用的函数
     virtual void visit(void);
  //将一个CCNode指针做为自已的子结点
     virtual void addChild(CCNode * child);
  //将一个CCNode指针以指定的Z顺序做为自已的子结点
     virtual void addChild(CCNode * child, int zOrder);
  //将一个CCNode指针以指定的Z顺序并附带一个参数值做为自已的子结点
     virtual void addChild(CCNode * child, int zOrder, int tag);
  //将一个子结点重新设置Z顺序
     virtual void reorderChild(CCNode * child, int zOrder);
     //将一个子结点删除,并根所参数决定是否释放元素
     virtual void removeChild(CCNode* child, bool cleanup);
  //将所有的子结点移除,并根所参数决定是否释放元素
     virtual void removeAllChildrenWithCleanup(bool cleanup);
  //绘制函数
     virtual void draw(void);

    protected:
        
        //从精灵数据中在图块管理器中插入一个新的图块,注意:并不将精灵放入子结点。  void addQuadFromSprite(CCSprite *sprite, unsigned int index);
  //在子结点数组指定位置插入一个新的精灵。注意:并不新建图块。
        CCSpriteBatchNode * addSpriteWithoutQuad(CCSprite*child, unsigned int z, int aTag);

 private:
  //更新混合状态
  void updateBlendFunc();

 protected:
  //使用的纹理图块顶点缓冲管理器
  CCTextureAtlas *m_pobTextureAtlas;
  //混合状态
  ccBlendFunc m_blendFunc;
  //指向存放所有使用此纹理中的图块的CCSprite指针数组的指针
  CCArray* m_pobDescendants;
 };