cocos2d-x中CCArray里面CCARRAY_FOREACH的用法
来源:互联网 发布:中国网络空间安全网 编辑:程序博客网 时间:2024/05/16 12:13
欢迎转帖:http://blog.csdn.net/wolfking_2009/article/details/9731785
CCArray这个是在cocos2d-x当中很常用的,其基类是CCObject,主要是作为存储CCObject指针的容器来使用的。最常用的地方是存储CCNode及其子类的children。CCNode在cocos2d-x当中的重要性不言而喻,而其children也是要经常要被操作的~一般在遍历CCNode的children的时候,会使用一个宏CCARRAY_FOREACH。该宏简化了遍历写法。主要写法如下:
CCArray * pChildrenArray = this->getChildren();CCLayer* child = NULL;CCObject* pObject = NULL;CCARRAY_FOREACH(pChildrenArray, pObject){child = (CCLayer*)pObject;if(!child)break;child->dosomething();}
可以看出,这个宏在对children进行集体操作的时候十分有用,也很简便。但是这样的简便却有可能让你踏入陷阱当中。
再来看下该宏的实现部分:
#define CCARRAY_FOREACH(__array__, __object__) \ if ((__array__) && (__array__)->data->num > 0) \ for(CCObject** __arr__ = (__array__)->data->arr, **__end__ = (__array__)->data->arr + (__array__)->data->num-1; \ __arr__ <= __end__ && (((__object__) = *__arr__) != NULL/* || true*/); \ __arr__++)
可以看出其是使用指针的指针来实现的,首先CCObject** __arr__ = (__array__)->data->arr获取arrary中第一个CCObject对象指针的指针,__end__即为获取最后一个。__arr__++意为每次,二级指针++,该指针指向后一个指针,就是下一个CCObject指针的指针。__arr__<= __end__确定指针范围。__object__ = *__arr__,将__arr__所指向的CCObjec指针赋值给__object__。
这个宏很实用,但是如果在对children遍历的过程中,对CCArray的数据进行了修改(比如增删),那么这个宏可能会发生致命的错误,本人就经历了这样的错误,debug了很久才发觉是这个宏的原因~
本人在dosomething的时候,往CCArray里面添加了CCNode对象,然后导致了错误~
所以总结一下,使用该宏的时候要确保,中间的过程没有对CCArray进行增删,动态数组遇到这样的问题很常见,大家注意点~
欢迎转帖:http://blog.csdn.net/wolfking_2009/article/details/9731785
- cocos2d-x中CCArray里面CCARRAY_FOREACH的用法
- cocos2d-x中CCArray里面CCARRAY_FOREACH的用法
- cocos2d-x中CCArray里面CCARRAY_FOREACH的用法
- cocos2d-x的CCArray用法
- cocos2d-x的CCArray用法
- Cocos2d-x中的CCARRAY_FOREACH的使用
- cocos2d-x CCArray的创建问题
- cocos2d-x CCArray使用方法
- cocos2d-x ccArray 讲解
- cocos2d-x中的CCArray
- cocos2d-x中的CCArray
- 【Cocos2d-x 018】 CCArray
- 【Cocos2d-x】CCArray
- cocos2d-x,Ios里面多线程的用法
- cocos2d-x CCArray用法 遍历和删除元素
- cocos2d-x CCArray用法 遍历和删除元素
- cocos2d-x CCArray用法 遍历和删除元素
- cocos2d-x CCArray用法 遍历和删除元素
- 勉励
- 跟着BOY学习开发cocos2d-x 游戏 实战篇(7)之 关卡系统的基本设计
- eMule 无法连接到ed2k 的解决方法
- 初学AJAX JSON调用
- 为什么pdf会出现“复制到剪贴板时发生错误。出现内部错误”
- cocos2d-x中CCArray里面CCARRAY_FOREACH的用法
- 《广语言JavaScript中文编程》目录(暂定)
- MFC 常见的窗口,空间句柄获取问题总结
- maven学习(1)
- TestNG 教程3 – 忽略测试方法
- nanopb的使用
- html样式标签是不能绑定事件
- PAT 1020 Tree Traversals
- ARM9开Icache代码