cocos2d-x学习笔记——各种遍历与范围for语句的使用
原文转自各种遍历与范围for语句的使用 遍历这东西,我的理解就是for语句的加强版啦。本来这种小技巧类型的博文应该放到Cocos2dx 小技巧这一栏里,但因为涉及到3.0的一些知识与C++ 11的新特性,所以就大胆的放这了。 下面介绍一些常用的遍历。 1、CCArray的遍历看到这里,有些人又按耐不住的要举起西瓜刀了:你不是说3.0beta后已经没有CCArray这货了吗?现在又拿出来作甚? 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强制转换成Sprite
sp_obj->runAction(MoveBy::create(3.0f,Point(250,250)));//运动
}
当然了,有些人喜欢更刺激的方式,从后面来!有没有这种遍历呢?当然,CCARRAY_FOREACH_REVERSE(_array,_object)满足你所有的幻想。 2、CCDictionary的遍历我再次恳求你放下手里愤怒的西瓜刀!如果CCArray与__Array是同父异母,那么CCDictionary与__Dictionary就是同母异父了! __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强制转换成Sprite
sp_obj->runAction(MoveBy::create(3.0f,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的用法还不是很熟悉的童鞋,猛戳这里:浅谈容器Vector 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,250)));
}
对Map不熟悉?猛戳这里:浅谈容器Map 5、使用范围for语句上面Vector与Map的使用过程都用到一个新鲜玩意:范围for语句。既然都写到这了,我就继续扯点内容凑字数吧。 for(declaratio : expression)
{
//statement;
}
expression是一个对象,例如Vector这种容器,declarationo负责定义一个变量,该变量每次循环都会被初始为expression中的下一个元素之。 下面用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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |