閱讀954 返回首頁    go 阿裏雲 go 技術社區[雲棲]


Cocos2dx 3.0 過渡篇(九)淺談容器Map

尊重原創,轉載請注明來自:star特530的CSDN博客 https://blog.csdn.net/start530/article/details/19284301


本篇接著上一篇的容器繼續嘮叨,了解上一篇:https://blog.csdn.net/start530/article/details/19170853

既然Vector是對比Array,那麼Map就對比Dictionary吧。
1、創建

  1. auto sp1 = Sprite::create("CloseNormal.png");  
  2. sp1->setPosition(Point(100,100));  
  3. this->addChild(sp1,1);  
  4.   
  5. auto sp2 = Sprite::create("CloseSelected.png");  
  6. sp2->setPosition(Point(100,200));  
  7. this->addChild(sp2,1);  

  1. //創建容器  
  2. Alpha:  
  3.     auto sp_dic = Dictionary::create();//創建一個字典  
  4. beta:  
  5.     //建立一個關聯容器map,第一個參數是string型的key,第二個參數是Sprite類的key值  
  6.     Map<std::string,Sprite*>sp_map;  

2、將對象放入到容器中

  1. Alpha:  
  2.     sp_dic->setObject(sp1,"sp1");//將精靈放入字典中,第二個參數是精靈在字典中的key  
  3.     sp_dic->setObject(sp2,"sp2");  
  4. beta:  
  5.     sp_map.insert("sp1",sp1);//將精靈放入容器中,第一個參數是key  
  6.     sp_map.insert("sp2",sp2);  

3、取出容器中的元素
   map是鍵-值對的集合。map類型通常可以理解為關聯數組,Vector容器可以使用類似數組a[0],a[2]這種下標的方式獲得容器內的元素,Map容器也是可以通過下標的方式獲取,但下標是指元素特定的鍵,而不是通過在數組中的位置。

  1. Alpha:  
  2.     auto sp = (Sprite*)sp_dic->objForKey("sp1");//取出sp1  
  3. beta:  
  4.     auto sp = sp_vec.at("sp1");//通過鍵值獲得sp1  

4、其他功能

  1. auto sp5 = sp_map.at("sp1");//通過key取出sp1  
  2. sp_map.insert("10",sp5);//再將sp1 以三個key值的方式存入map  
  3. sp_map.insert("20",sp5);  
  4. sp_map.insert("30",sp5);  
  5.   
  6. auto _key = sp_map.keys(sp1);//獲得sp1對應的key值  
  7. for(const auto&e : _key)  
  8. {  
  9.     //C++ 11 後新增的這種for 功能,不懂的可以去百度下  
  10.     CCLOG("_key is %s",e.c_str());//輸出sp1 對應的key值(有四個,分別是:sp1,10,20,30)  
  11. }  
Map對象的元素是鍵-值對,也就是每個元素包含兩個部分:鍵以及由鍵關聯的值。這種鍵和鍵值組成一個pair類型,它的first元素指向鍵,second元素則為元素。如下:

  1. auto find_sp = sp_map.find("10");//通過find()查找key為“10”的pair類型。  
  2. auto sp6 = find_sp->second;//鍵對應的對象  
  3. std::string find_str = find_sp->first;//鍵  
  4. CCLOG("sp6 key value is %s",find_str.c_str());//打印出鍵  
  5. sp6->runAction(MoveBy::create(0.3f,Point(200,0)));//讓sp6做運動  



恩,天氣不錯,就寫到這吧,再多寫一點又要露餡了....

尊重原創,轉載請注明原址https://blog.csdn.net/start530?viewmode=contents

最後更新:2017-04-03 12:56:12

  上一篇:go Cocos2dx 3.0 過渡篇(十)資源加載進度條Loading...
  下一篇:go Cocos2dx入門小遊戲---Runner教程