Cocos2d-x中的CCARRAY_FOREACH的使用
2015-07-22 16:36
423 查看
CCARRAY_FOREACH是Cocos2d-x中经常被用到的一个宏,它提供了对__Array的正向遍历。
CCARRAY_FOREACH的定义如下:
然后在for循环的初始化语句中,__arr__是一个二重指针被定义指向数组__array__,指向数组的名字就是指向数组的第一个元素,所以__arr__就是指向了数组__array__的第一个元素。__end__则是指向了数组__array__的最后一个元素。在for循环的循环条件中,比较__arr__与__end__,然后将当前__arr__指向的元素赋值给变量__object__,赋值运算符返回一个左边变量的指针,通过判断其是否为NULL来判断赋值是否成功。最后在for循环的表达式中,将__arr__自加,作用是将指针后移。
通过以上分析,可以发现CCARRAY_FOREACH跟C++11中的范围for很类似,用法也类似,只不过参数中的__object__需要在前面定义完成。
CCARRAY_FOREACH的基本用法如下:
CCARRAY_FOREACH的定义如下:
#define CCARRAY_FOREACH(__array__, __object__) \ if ((__array__) && (__array__)->data->num > 0) \ for(Ref** __arr__ = (__array__)->data->arr, **__end__ = (__array__)->data->arr + (__array__)->data->num-1;\ __arr__ <= __end__ && (((__object__) = *__arr__) != NULL/* || true*/);\ __arr__++)首先判断数组是否存在以及数组元素个数是否大于零。
然后在for循环的初始化语句中,__arr__是一个二重指针被定义指向数组__array__,指向数组的名字就是指向数组的第一个元素,所以__arr__就是指向了数组__array__的第一个元素。__end__则是指向了数组__array__的最后一个元素。在for循环的循环条件中,比较__arr__与__end__,然后将当前__arr__指向的元素赋值给变量__object__,赋值运算符返回一个左边变量的指针,通过判断其是否为NULL来判断赋值是否成功。最后在for循环的表达式中,将__arr__自加,作用是将指针后移。
通过以上分析,可以发现CCARRAY_FOREACH跟C++11中的范围for很类似,用法也类似,只不过参数中的__object__需要在前面定义完成。
CCARRAY_FOREACH的基本用法如下:
__Array* array = __Array::create(); Ref* obj; CCARRAY_FOREACH(array, obj){ //调用obj进行操作 }范围for的基本用法如下:
std::string str("Hello World"); for(auto c : str){ std::cout<< c <<std::endl; }可以发现用法基本是一样的,所以就把CCARRAY_FOREACH当成范围for去用就可以。
相关文章推荐
- Cocos2d-x中背景音乐和音效使用实例
- Cocos2d-x学习笔记之CCScene、CCLayer、CCSprite的默认坐标和默认锚点实验
- Cocos2d-x UI开发之CCControlPotentiometer控件类使用实例
- Cocos2d-x UI开发之文本类使用实例
- Cocos2d-x保存用户游戏数据之XML文件是否存在问题判断方法
- Cocos2d-x UI开发之菜单类使用实例
- Cocos2d-x UI开发之CCControlButton控件类实例
- Cocos2d-x学习笔记之世界坐标系、本地坐标系、opengl坐标系、屏幕坐标系
- Cocos2d-x UI开发之CCControlColourPicker控件类使用实例
- Cocos2d-x学习笔记之CCLayerColor层的使用实例
- Cocos2d-x Schedule定时器的使用实例
- Cocos2d-x中使用CCScrollView来实现关卡选择实例
- Cocos2d-x中CCEditBox文本输入框的使用实例
- cocos2d-x学习笔记之CCLayer、CCLayerColor、CCLayerGradient、CCLayerMultiplex场景层介绍
- Cocos2d-x UI开发之CCControlSlider控件类使用实例
- Cocos2d-x学习笔记之开发环境搭建
- Cocos2d-x学习笔记之Hello World!
- Cocos2d-x的内存管理总结
- Cocos2d-x 3.0中集成社交分享ShareSDK的详细步骤和常见问题解决
- Cocos2d-x入门教程(详细的实例和讲解)