Cocos2dx3.0过渡篇 各种遍历与范围for语句的使用【转】
1、CCArray的遍历
看到这里,有些人又按耐不住的要举起西瓜刀了:你不是说3.0beta后已经没有CCArray这货了吗?现在又拿出来作甚?
其实我也很无辜,CCArray确实是没了,但在某个不为人知的角落里却藏着__Array这货,我大胆猜测它是CCArray同父异母的兄弟,因为它有着和CCArray一样的功能。可惜的是,因为Vector的崛起,__Array注定只会埋没。
CCArray的遍历宏是CCARRAY_FOREACH(_array,_object),这种遍历方式是正想遍历,用for语句来解释就是从int i=0开始。用法如下:
01.
auto sp = Sprite::create(
"close.png"
);
//建立俩精灵
02.
sp->setPosition(Point(
200
,
300
));
03.
this
->addChild(sp,
2
);
04.
05.
auto sp2 = Sprite::create(
"close.png"
);
06.
sp2->setPosition(Point(
300
,
300
));
07.
this
->addChild(sp2,
2
);
08.
09.
__Array* m_array = __Array::create();
//用__Array创建一个数组
10.
m_array->addObject(sp);
//将sp与sp2放入数组中
11.
m_array->addObject(sp2);
12.
13.
Ref* obj = nullptr;
14.
CCARRAY_FOREACH(m_array,obj)
15.
{
16.
auto sp_obj = static_cast<Sprite*>(obj);
//将obj强制转换成Sprite
17.
sp_obj->runAction(MoveBy::create(
3
.0f,Point(
250
,
250
)));
//运动
18.
}
当然了,有些人喜欢更刺激的方式,从后面来!有没有这种遍历呢?当然,CCARRAY_FOREACH_REVERSE(_array,_object)满足你所有的幻想。用某人的话来说就是:从后面来就是.痛!快!。事实真有这么痛快吗?赶紧试下不就知道了(前提是你要有一个女朋友...奇怪,我为什么会说到女朋友??)。
2、CCDictionary的遍历
我再次恳求你放下手里愤怒的西瓜刀!如果CCArray与__Array是同父异母,那么CCDictionary与__Dictionary就是同母异父了!
CCDictionary的遍历宏:CCDICT_FOREACH(_dic,_ele),用法如下:
01.
__Dictionary* dic = __Dictionary::create();
02.
dic->setObject(sp,
"sp"
);
//将sp与sp2放入字典中,键分别为sp与sp2
03.
dic->setObject(sp2,
"sp2"
);
04.
05.
DictElement* ele;
06.
CCDICT_FOREACH(dic,ele)
07.
{
08.
auto sp_obj = static_cast<Sprite*>(ele->getObject());
//将ele强制转换成Sprite
09.
sp_obj->runAction(MoveBy::create(
3
.0f,Point(
250
,
250
)));
10.
}
3、Vector的"遍历"
Vector的遍历就涉及到C++11了,而一跟C++ 11扯上关系,意味着代码可以写的更简便,不信?看下面。
1.
Vector<Sprite*> sp_vec;
//创建一个容器
2.
sp_vec.pushBack(sp);
//将俩精灵扔进去
3.
sp_vec.pushBack(sp2);
4.
5.
for
( auto sp_obj : sp_vec)
6.
{
7.
sp_obj->runAction(MoveBy::create(
3
.0f,Point(
250
,
250
)));
//每次for循环都从sp_vec容器中取出一个精灵
8.
}
一步到位有木有!如果对Vector的用法还不是很熟悉的童鞋,猛戳这里:http://blog.csdn.net/start530/article/details/19170853
4、Map的"遍历"
与Vector的遍历方式类似,但又有那么一些不一样的:
01.
Map<std::string,Sprite*> sp_map;
//创建一个Map容器,键值分别为string型与Sprite类型
02.
sp_map.insert(
"sp"
,sp);
//将sp扔进去,
03.
sp_map.insert(
"sp2"
,sp2);
04.
05.
for
( auto e : sp_map)
06.
{
07.
auto sp_obj = e.second;
//e.first获得的是e的键值,e.second获得对象
08.
sp_obj->runAction(MoveBy::create(
3
.0f,Point(
250
,
250
)));
09.
}
对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对象中的字符每行一个输出出来:
1.
std::string str(
"star530 is so cool"
);
2.
//每行输出str中的一个字符
3.
for
(auto c : str)
//对于str中的每个字符
4.
cout << c << endl;
//输出当前字符,后面紧跟一个换行符
通过使用auto来确定c的类型(c的类型为char)。每次循环时,str的下一个字符被拷贝给c。
Cocos2dx3.0过渡篇 各种遍历与范围for语句的使用【转】的更多相关文章
- Cocos2dx3.0过渡篇 globalZOrder()与localZOrder()
这篇博客的标题本想叫“...3.0新的渲染...介绍”,最后还是拉不下这个脸.为啥?觉得自己对渲染的认识还是过于表面,谈不上理解.当然了,这并不影响这篇博客继续写下去.下面看一段3.0Release ...
- Cocos2dx 3.0 过渡篇(三十)灰机还是3D好(Sprite3D)
如今都非常少发3.0过渡篇这一系列的博文了,原因是多方面的,一个是游戏开发进度,尽管上面并没给我什么压力,但我自己一直在赶.还有一方面是个人私生活这块.五月份确实是多事之秋,有时候真的没办法全心思去研 ...
- Cocos2dx 3.0 过渡篇(二十九)globalZOrder()与localZOrder()
前天非常难得的加班到八点...为什么说难得呢?由于平时我差点儿就没加班过.六点下班后想走就走,想留就留.率直洒脱.不拘一格.尽显男儿本色.程序猿,就是这么自信! -----------这篇博客的标题本 ...
- Cocos2dx 3.0 过渡篇(三十一)ValueVector和Vector不得不说的故事
本文投票地址:http://vote.blog.csdn.net/Article/Details?articleid=37834689 前天看到一个颇为纠结的选择题:有一天你遇到一个外星人,这时外星人 ...
- Cocos2dx 3.0 过渡篇(二十七)C++11多线程std::thread的简单使用(下)
本篇接上篇继续讲:上篇传送门:http://blog.csdn.net/star530/article/details/24186783 简单的东西我都说的几乎相同了,想挖点深的差点把自己给填进去. ...
- Cocos2dx 3.0 过渡篇(二十六)C++11多线程std::thread的简单使用(上)
昨天练车时有一MM与我交替着练,聊了几句话就多了起来,我对她说:"看到前面那俩教练没?老色鬼两枚!整天调戏女学员."她说:"还好啦,这毕竟是他们的乐趣所在,你不认为教练每 ...
- Cocos2dx 3.0 过渡篇(二十五)死不了的贪食蛇(触摸版)
上一篇写的贪食蛇的重力感应控制版,这一篇就讲下触摸控制版吧.额,也不知道写了那个贪食蛇教程究竟有没有获得沈老师的书,假设没有的话,看我不拿西瓜刀砍掉 偶尔E往事 的那啥! 重力版链接:http://b ...
- Cocos2dx 3.0 过渡篇(二十八)C++11强类型枚举
一朋友在微信朋友圈晒了张照片,随手点开大图,带着赞赏的眼光扫了下,恩,几个月不见.又美丽了...咦?等等,她戴的这是什么?酷炫的造型! 金属边框! 微型摄像头! 这不是传说中的谷歌眼镜么?土豪啊,还好 ...
- Cocos2d-x3.0游戏实例《不要救我》第十篇(结束)——使用Json配置数据类型的怪物
如今我们有2种类型的怪物,并且创建的时候是写死在代码里的,这是要作死的节奏~ 所以.必须可配置.不然会累死人的. ; i < size; ++i) { int id = root[i][&quo ...
随机推荐
- Call to undefined function bcscale()
参考官方文档发现zabbix需要bcmath函数库的支持,其中bcscale()就是该函数库中的函数之一. 因此,现在只需要让php支持bcmath即可. yum -y install php-bcm ...
- web前端基础知识及快速入门指南
web前端基础知识及快速入门指南 做前端开发有几个月了,虽然说是几个月,但是中间断断续续的上课.考试以及其它杂七杂八的事情,到现在居然一直感觉自己虽然很多前端的知识很眼熟,却也感觉自己貌似也知识在门口 ...
- Angular学习(1)
天天都是hello world,老子玩1+1. 最简单的例子,见证无聊的时刻: <!DOCTYPE html> <html> <head> <title> ...
- php 根据指定的键对多维数组进行排序
根据指定的键对多维数组排序,可以按照多个键排序 我们通常有一些多维数组需要排序: $guys = array( array( 'name' => 'jake', 'score' => 80 ...
- 【WP之一】]独立存储
介绍: 提供一个磁盘存储空间,他是一种虚拟的文件系统,能存储小量的数据:在默认的情况下,它只能存储1MB的文件.根据使用方式及功能的不同,独立存储空间又包含两部分:独立设置存储和独立文件存储.除非卸载 ...
- 黄聪:360浏览器如何使用插件实现解除网页禁用右键复制的限制(Enable Copy)
使用Enable Copy插件即可. 插件下载:Enable-Copy_v1.15.rar
- HDU 1213 How Many Tables(并查集,简单)
题解:1 2,2 3,4 5,是朋友,所以可以坐一起,求最小的桌子数,那就是2个,因为1 2 3坐一桌,4 5坐一桌.简单的并查集应用,但注意题意是从1到n的,所以要减1. 代码: #include ...
- linux 标准输入输出
文件描述符是一个简单的正整数,用以标明每一个被进程所打开的文件和socket.最前面的三个文件描述符(0,1,2)分别与标准输入(stdin),标准输出(stdout)和标准错误(stderr)对应 ...
- Linux Deepin 2014安装Lenovo LJ2600D驱动
双11老师给实验室抢了个Lenovo LJ2600D的USB接口打印机,并用旧的HP-1080MFP网络打印服务器连接上了.Windows下就不多说了,官方给的驱动就是针对它的,同学们都用得爽爆了,因 ...
- Chrome每次打開都要打開123.sogou.com
剛開始還以為中毒了,又是殺毒又是掃描的,最後發覺,原來就是chrome的一個設置被改了. Chrome->設置->啟動時 : 選打开特定网页或一组网页->設置網頁 , 將其中的123 ...