时至今日都是我咎由自取,错就错,与任何人无关。IT事业的平顺,造就了低调谦虚的我。风度翩翩的气质,导致今日岌岌可危的地步,我今天愿意承担一切后果。其实,我很感谢你们让我跌倒在今天,而不是在我出任CEO的将来。我必须重新吹个发型,坦然面对镜中的自己并作出慎重的决定!我star特,在新浪博客写了一些水平凑合的文章。我辜负了Jacky姬和木头凶,辜负了...(好吧,实在编不下去了,都什么乱七八糟的...果然模仿不来啊!!)

----------------
遍历这东西,我的理解就是for语句的加强版啦。本来这种小技巧类型的博文应该放到Cocos2dx 小技巧这一栏里,但因为涉及到3.0的一些知识与C++ 11的新特性,所以就大胆的放这了。

下面介绍一些常用的遍历。
1、CCArray的遍历
看到这里,有些人又按耐不住的要举起西瓜刀了:你不是说3.0beta后已经没有CCArray这货了吗?现在又拿出来作甚?
其实我也很无辜, CCArray确实是没了,但在某个不为人知的角落里却藏着__Array这货,我大胆猜测它是CCArray同父异母的兄弟,因为它有着和CCArray一样的功能。可惜的是,因为Vector的崛起,__Array注定只会埋没。

CCArray的遍历宏是CCARRAY_FOREACH(_array,_object),这种遍历方式是正想遍历,用for语句来解释就是从int i=0开始。用法如下:

auto sp = Sprite::create("close.png");//建立俩精灵
sp->setPosition(Point(200,300));
this->addChild(sp,2);auto sp2 = Sprite::create("close.png");
sp2->setPosition(Point(300,300));
this->addChild(sp2,2);__Array* m_array = __Array::create();//用__Array创建一个数组
m_array->addObject(sp);//将sp与sp2放入数组中
m_array->addObject(sp2);Ref* obj = nullptr;
CCARRAY_FOREACH(m_array,obj)
{auto sp_obj = static_cast<Sprite*>(obj);//将obj强制转换成Spritesp_obj->runAction(MoveBy::create(3.0f,Point(250,250)));//运动
}

当然了, 有些人喜欢更刺激的方式,从后面来!有没有这种遍历呢?当然,CCARRAY_FOREACH_REVERSE(_array,_object)满足你所有的幻想。用某人的话来说就是:从后面来就是.痛!快!。事实真有这么痛快吗?赶紧试下不就知道了(前提是你要有一个女朋友...奇怪,我为什么会说到女朋友??)。

2、CCDictionary的遍历
我再次恳求你放下手里愤怒的西瓜刀!如果CCArray与__Array是同父异母,那么CCDictionary与__Dictionary就是同母异父了!
CCDictionary的遍历宏:CCDICT_FOREACH(_dic,_ele),用法如下:

__Dictionary* dic = __Dictionary::create();
dic->setObject(sp,"sp");//将sp与sp2放入字典中,键分别为sp与sp2
dic->setObject(sp2,"sp2");DictElement* ele;
CCDICT_FOREACH(dic,ele)
{auto sp_obj = static_cast<Sprite*>(ele->getObject());//将ele强制转换成Spritesp_obj->runAction(MoveBy::create(3.0f,Point(250,250)));
}

3、Vector的"遍历"
Vector的遍历就涉及到C++11了,而一跟C++ 11扯上关系,意味着代码可以写的更简便,不信?看下面。

Vector<Sprite*> sp_vec;//创建一个容器
sp_vec.pushBack(sp);//将俩精灵扔进去
sp_vec.pushBack(sp2);for( auto sp_obj : sp_vec)
{sp_obj->runAction(MoveBy::create(3.0f,Point(250,250)));//每次for循环都从sp_vec容器中取出一个精灵
}

一步到位有木有!如果对Vector的用法还不是很熟悉的童鞋,猛戳这里:http://blog.csdn.net/start530/article/details/19170853

4、Map的"遍历"
与Vector的遍历方式类似,但又有那么一些不一样的:

Map<std::string,Sprite*> sp_map;//创建一个Map容器,键值分别为string型与Sprite类型
sp_map.insert("sp",sp);//将sp扔进去,
sp_map.insert("sp2",sp2);for( auto e : sp_map)
{auto sp_obj = e.second;//e.first获得的是e的键值,e.second获得对象sp_obj->runAction(MoveBy::create(3.0f,Point(250,250)));
}

对Map不熟悉?猛戳这里:http://blog.csdn.net/start530/article/details/19284301

5、使用范围for语句

上面Vector与Map的使用过程都用到一个新鲜玩意:范围for语句。既然都写到这了,我就继续扯点内容凑字数吧。

范围for语句是C++11新提供的一种语句,它的形式如下:
for(declaratio : expression)
{
//statement;
}

expression是一个对象,例如Vector这种容器,declarationo负责定义一个变量,该变量每次循环都会被初始为expression中的下一个元素之。
那么什么类型的对象可以使用范围for语句呢?目前我知道的可以使用的有:vector,map,std::string,还有cocos2dx中的Vector,Map。这些的共同特点都是拥有能返回迭代器的begin和end成员。

下面用std::string来举个例子:使用范围for语句把string对象中的字符每行一个输出出来:

std::string str("star530 is so cool");
//每行输出str中的一个字符
for(auto c : str)       //对于str中的每个字符cout << c << endl; //输出当前字符,后面紧跟一个换行符

通过使用auto来确定c的类型(c的类型为char)。每次循环时,str的下一个字符被拷贝给c。

恩,就这样。

尊重原创,转载请注明来源:http://blog.csdn.net/start530/article/details/22697167

Cocos2dx 3.0 过渡篇(二十二)各种遍历与范围for语句的使用相关推荐

  1. 硬盘底座linux,微客智品 篇五十二:机械硬盘如何安放?用奥睿科单盘位移动硬盘底座助力新玩法...

    微客智品 篇五十二:机械硬盘如何安放?用奥睿科单盘位移动硬盘底座助力新玩法 2020-01-07 15:36:58 1点赞 10收藏 30评论 随着新一代M.2硬盘的流行与普及,3.5寸机械硬盘愈发变 ...

  2. 科学计算机后盖换电池,图吧小白教程 篇二十二:手把手教你给手机换电池(拆机)...

    图吧小白教程 篇二十二:手把手教你给手机换电池(拆机) 2019-11-16 14:06:58 4点赞 18收藏 2评论 创作立场声明:手机换电池省钱可以自己动手从工钱上省,买电池最好还是不要省钱买杂 ...

  3. 多麦克风做拾音的波束_乱侃外设 篇四十二:一浪更比一浪强!HyperX Quadcast S 声浪加强版麦克风浅评...

    原标题:乱侃外设 篇四十二:一浪更比一浪强!HyperX Quadcast S 声浪加强版麦克风浅评 乱侃外设 篇四十二:一浪更比一浪强!HyperX Quadcast S 声浪加强版麦克风浅评 20 ...

  4. LINUX学习基础篇(十二)痕迹命令

    LINUX学习基础篇(十二)痕迹命令 系统痕迹命令 w命令 who命令 last命令 lastlog命令 lastb命令 系统痕迹命令 系统中有一些重要的痕迹日志文件,如/var/log/wtmp./ ...

  5. 疯狂的大柚柚带你玩转MSP-ESP430G2(基础篇)----(十二)AD转换器

    疯狂的大柚柚带你玩转MSP-ESP430G2(基础篇) (十二)AD转换器 ADC10是MSP430 单片机的片上模数转换器,其转换位数为10比特,该模块内部是一个SAR型的AD内核,可以在片内产生参 ...

  6. Web基础配置篇(十二): Elasticsearch的安装配置及入门使用

    Web基础配置篇(十二): Elasticsearch的安装配置及入门使用 一.概述 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RE ...

  7. 谷粒商城--秒杀服务--高级篇笔记十二

    谷粒商城–秒杀服务–高级篇笔记十二 1.后台添加秒杀商品 未配置秒杀服务相关网关 1.1 配置网关 - id: coupon_routeuri: lb://gulimall-couponpredica ...

  8. 【Vue2.0】—Vue脚手架配置代理(二十二)

    [Vue2.0]-Vue脚手架配置代理(二十二) 方法一 方法二

  9. 安卓修改电池容量教程_图吧小白教程 篇三十二:手机拆换原装电池教程——替换寿命将届的原厂电池,提升手机续航...

    图吧小白教程 篇三十二:手机拆换原装电池教程--替换寿命将届的原厂电池,提升手机续航 2019-12-05 13:01:04 1点赞 20收藏 1评论 你是AMD Yes党?还是intel和NVIDI ...

最新文章

  1. 【iOS开发】企业版证书($299)In-House方式发布指南 (转)
  2. 用matlab判断文件是否存在_判断文件夹、文件是否存在、创建文件 c++ matlab
  3. wps出现安装installer_判断本机是否安装Microsoft Office或者wps
  4. python pptp链接_pptp-client连接设置
  5. mysql 回滚段_MySQL和PostgreSQL比较
  6. 因为有人说的WZ132
  7. 【Java从0到架构师】Linux 基础知识、常用命令
  8. spider_使用随机User-Agent库, 爬取笔趣阁万古天帝章节目录_(fake_useragent)
  9. 阿里巴巴矢量图标库的使用,超详细用法
  10. 证据理论的模态逻辑解释
  11. Android MPush开源消息推送系统:简洁、安全、支持集群
  12. Java实现多张图片转pdf
  13. 搞懂Java代理和反射一篇就够了
  14. 磊科linux无线网卡驱动安装步骤,磊科nw360无线网卡安装教程(附磊科nw360驱动下载)...
  15. latex 去掉(不显示)空白页的页码与页眉
  16. 揭秘慕思“智商税”:狂砸40亿搞营销,发明专利仅7项
  17. 十四、数字图像处理之图像压缩
  18. Word 2010 中的 VBA 入门
  19. 自定义Android聊天气泡ChatView。仿微信聊天气泡,能自定义边框,颜色,点击特效。
  20. CoherenceModel官网翻译

热门文章

  1. 我们越来越依赖计算机英语作文,依赖电脑英语作文.doc
  2. cc2530下载程序
  3. 2022蓝牙耳机热销榜,性价比高口碑好的蓝牙耳机品牌
  4. Tensorflow笔记__使用mnist数据集并测试自己的手写图片
  5. 几道python练手小题目
  6. (迪杰斯特拉)Dijkstra算法 与 普里姆算法(Prim算法)
  7. 关于投影概念的理解(墨卡托、高斯…
  8. 阿里菜鸟网络java社招面试
  9. S32K142的lin组件使用
  10. 姑苏拟秋裤邻近建楼房 摩天大楼泡沫隐现