[转]cocos2d-x中的CCArray

转载 2014年04月29日 13:36:26

最近有用到CCArray,看到个不错的文章,就转载一下,一方便日后查看:

原文地址:http://blog.csdn.net/jnanxu/article/details/14124367

先来认识下CCArray的属性:

  1. /** 创建一个数组 */  
  2. static CCArray* create();  
  3. /** 通过一些对象创建一个数组 */  
  4. static CCArray* create(CCObject* pObject, ...);  
  5. /** 创建一个数组,并将对象放进去 */  
  6. static CCArray* createWithObject(CCObject* pObject);  
  7. /** 创建一个数组,设定估计容量 */  
  8. static CCArray* createWithCapacity(unsigned int capacity);  
  9. /** 同一个一个数组创建一个数组 */  
  10. static CCArray* createWithArray(CCArray* otherArray);  
  11. /** 
  12.  @brief   通过文件导入一个数组 
  13.  @param   pFileName  一个*.plist格式的文件 
  14.  @return  返回CCArray数组指针 
  15.  */  
  16. static CCArray* createWithContentsOfFile(const char* pFileName);  
  17.   
  18. /* 
  19.  @brief 同上, 但是不会调用autorelease, 所以调用之后需要执行release(). 
  20.  */  
  21. static CCArray* createWithContentsOfFileThreadSafe(const char* pFileName);  
  22.   
  23. /** 初始化数组 */  
  24. bool init();  
  25. /** 通过一个对象初始化数组 */  
  26. bool initWithObject(CCObject* pObject);  
  27. /** 通过一些对象初始化数组 */  
  28. bool initWithObjects(CCObject* pObject, ...);  
  29. /** 初始化数组,设定估计容量 */  
  30. bool initWithCapacity(unsigned int capacity);  
  31. /** 通过一个数组初始化数组 */  
  32. bool initWithArray(CCArray* otherArray);  
  33.   
  34. // 查询数组函数  
  35.   
  36. /** 返回数组元素的数量 */  
  37. unsigned int count() const;  
  38. /** 返回数组的估计容量 */  
  39. unsigned int capacity() const;  
  40. /** 通过对象去获得这个对象在数组中的下标,如果数组中没有这个对象会返回UINT_MAX */  
  41. unsigned int indexOfObject(CCObject* object) const;  
  42. /** 通过一个正确的下标去获得一个元素 */  
  43. CCObject* objectAtIndex(unsigned int index);  
  44. /** 返回最后一个元素 */  
  45. CCObject* lastObject();  
  46. /** 返回一个随机元素 */  
  47. CCObject* randomObject();  
  48. /** 判断数组是否包含该对象 */  
  49. bool containsObject(CCObject* object) const;  
  50. /** 从 1.1 之后,两个数组进行对比 */  
  51. bool isEqualToArray(CCArray* pOtherArray);  
  52.   
  53. // 添加函数  
  54.   
  55. /** 添加一个对象 */  
  56. void addObject(CCObject* object);  
  57. /** 添加数组所有元素 */  
  58. void addObjectsFromArray(CCArray* otherArray);  
  59. /** 插入一个对象到一个正确的下标位置 */  
  60. void insertObject(CCObject* object, unsigned int index);  
  61.   
  62. // 删除函数  
  63.   
  64. /** 删除最后一个元素 */  
  65. void removeLastObject(bool bReleaseObj = true);  
  66. /** 删掉数组中形参的元素 */  
  67. void removeObject(CCObject* object, bool bReleaseObj = true);  
  68. /** 通过一个正确的下标去删除元素 */  
  69. void removeObjectAtIndex(unsigned int index, bool bReleaseObj = true);  
  70. /** 通过一个数组去删除元素 */  
  71. void removeObjectsInArray(CCArray* otherArray);  
  72. /** 删除所有元素 */  
  73. void removeAllObjects();  
  74. /** 通过一个快速方式去删除元素 */  
  75. //快速方式就是:删除这个元素之后,将最后一个元素填充到删除位置。这样会打乱顺序,慎用  
  76. void fastRemoveObject(CCObject* object);  
  77. /** 通过一个快速方式去删除下标位置的元素 */  
  78. void fastRemoveObjectAtIndex(unsigned int index);  
  79.   
  80. //  重新安排内容  
  81.   
  82. /** 交换元素 */  
  83. void exchangeObject(CCObject* object1, CCObject* object2);  
  84. /** 交换制定的两下标的元素 */  
  85. void exchangeObjectAtIndex(unsigned int index1, unsigned int index2);  
  86.   
  87. /** 用一个对象去替换指定下标的元素 */  
  88. void replaceObjectAtIndex(unsigned int uIndex, CCObject* pObject, bool bReleaseObject = true);  
  89.   
  90. /** 翻转数组 */  
  91. void reverseObjects();  
  92. /* 缩小数组,让数组占用的内存符合元素的数量 */  
  93. void reduceMemoryFootprint();  


下面来介绍CCArrary几个可以用来偷懒的预编译:

  1. #define CCARRAY_FOREACH(__array__, __object__)  //遍历所有元素,后面会举例  
  2. #define CCARRAY_FOREACH_REVERSE(__array__, __object__)     //反序遍历元素  
  3. #define CCARRAY_VERIFY_TYPE(__array__, __type__)   //判断数组元素是否属于某类对象  
  4. #define arrayMakeObjectsPerformSelector(pArray, func, elementType)//让数组中所有元素去执行某一个函数  
  5. #define arrayMakeObjectsPerformSelectorWithObject(pArray, func, pObject, elementType)//让数组中所有元素去执行某一个函数 ,带参数  

举例:

  1. CCArray* arr = CCArray::create();  
  2.   
  3. CCObject* pNode;  
  4. CCARRAY_FOREACH(arr,pNode)  
  5. {  
  6.     pNode->retainCount();  
  7.     //遍历arr数组,让每一个元素执行retainCount()函数  
  8. }  

注意,不能通过CCARRAY_FOREACH去遍历删除元素,会删不干净。

原因:http://blog.csdn.net/lyh66/article/details/9613055

但是可以通过CCARRAY_FOREACH_REVERSE去遍历删除

cocos2d-x CCArray用法 遍历和删除元素

一.基本用法 1.声明初始化变量 C++ 123cocos2d::CCArray* pArray;pArray=CCArray...
  • mengfanteng
  • mengfanteng
  • 2014年07月26日 17:40
  • 602

【玩转cocos2d-x之十九】从CCObject看cocos2d-x的拷贝机制

CCObject在之前的文章中出现了N次,它扮演了一个老祖宗的角色,但是它到底是做什么的?先从它看看cocos2d-x的拷贝机制吧。 1.CCCopying CCObject从CCCopying继...
  • jackyvincefu
  • jackyvincefu
  • 2013年10月30日 08:13
  • 6990

cocos2d-x 中的数据结构集合(容器)(CCArray,Map,Vector)使用笔记

第1部分、CCArray cocos2d::CCArray(在3.0中已经过时,将被vector替代)是一个可变数组集合容器,放在其中的元素是有序的,并且可以重复,可以通过索引来获得元素,可以对容器内...
  • windvally
  • windvally
  • 2015年08月11日 16:14
  • 778

cocos2d-x 精灵的创建和基本使用

在cocos2d-x中,精灵可以说是一个最重要的组成元素,它代表游戏中一个最小的可见单位。同时也是CCNode一个最为灵活的子类,因为它可以通过装载一个平面纹理,从而具有丰富的表现力。       ...
  • decajes
  • decajes
  • 2014年05月12日 17:26
  • 3371

cocos2d-x 不同层控制精灵以及碰撞检测

Hi,推荐文件给你 "碰撞检测例子 2.zip" http://vdisk.weibo.com/s/J78kk 创建新工程之后,新建一个类HudLayer HudLayer...
  • qqMCY
  • qqMCY
  • 2013年07月08日 22:01
  • 2419

转【玩转cocos2d-x之二十五】数据结构CCArray

目录(?)[-] API 11创建12添加13删除14操作元素15操作array内容 remove和fastremove 21普通删除2快速删除3总结 内存分配 1容量和个数2判等 效率CCA...
  • u012839224
  • u012839224
  • 2015年05月02日 17:56
  • 360

【爱上cocos2d-x之十二】数据结构CCArray

cocos2d-x的CCArray是数据结构类,对游戏存储数组型数据做了优化。它模拟了苹果NSMutableArray的功能,但是执行效率更高。 1. API (1)创建 //创建一个数组array ...
  • Legendof1991
  • Legendof1991
  • 2014年03月25日 17:22
  • 1711

Cocos2d-x中的数组类CCArray深入分析

前面的博文中我们提到了一个词典类CCDictionary,它和数组类CCArray共称Cocos2d-x两大常用数据结构,因为在项目中数组类CCArray我们使用的实在是太多了,因此这里补充一篇关于C...
  • imxiangzi
  • imxiangzi
  • 2016年03月19日 11:00
  • 277

Cocos2d-x中的数组类CCArray深入分析

前面的博文中我们提到了一个词典类CCDictionary,它和数组类CCArray共称Cocos2d-x两大常用数据结构,因为在项目中数组类CCArray我们使用的实在是太多了,因此这里补充一篇关于C...
  • wuliaozhe1212
  • wuliaozhe1212
  • 2015年04月11日 20:09
  • 234

【玩转cocos2d-x之二十五】数据结构CCArray

CCArray是从cocos2d中移植过来的,类似于Apple的NSMutableArray,但是比NSMutableArray更为的好用。要注意的是虽然CCArray和CCDictionary可以管...
  • jackyvincefu
  • jackyvincefu
  • 2013年11月25日 08:58
  • 8830
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[转]cocos2d-x中的CCArray
举报原因:
原因补充:

(最多只允许输入30个字)