手把手教你在cocos2d-x中使用TileMap地圖編輯器(對象層部分)

之前三篇地圖主要講的都是地圖繪製有關的部分,這一篇就講一講如果添加對象層,以及如何處理對象層的信息

我們點擊 圖層->添加對象層

這裏就會出現一個新的對象層,區別於圖層,用紫色標記

同樣的,我們更改下名字,變爲“object0”

光加了層沒用,我們還得在層上標記具體的對象

下面我們把光標點中“object0”對象層

我們可以看見工具欄有了變化

前面與圖層有關的按鈕變爲了灰色,後面與對象層有關的按鈕變亮了

點擊 “插入對象”

按鈕

然後我們用鼠標在地圖上拖出一個框來,格子數多少可以自由決定

,不過一般我們就使用一格就好了,

 按住右下角的小正方形可以拖拉改變格子的大小

下面我們給對象添加屬性

右鍵點擊對象,彈出下框

 

點擊對象屬性

這裏上面第一排的名稱是方便在編輯器查看用的,因此最上面的“名稱”和類型處不填也可以。

下面我們加一個新的屬性,命名爲playerBorn吧,表示遊戲人物主角的出生地

值可以指定爲1,下面再定義個Hp的屬性,值寫個100,表示主角出生血量爲100

確定保存,之後加入到我們的遊戲工程目錄下

第二步:讀取屬性信息

 

  1. CCTMXObjectGroup* group = map->objectGroupName("object0");//第一步,獲取對象層  
  2. CCArray* objects = group->getObjects();//獲取層上對象集合  
  3. CCDictionary* dict = NULL;  
  4. CCObject* pObj = NULL;  
  5. CCARRAY_FOREACH(objects, pObj)//遍歷對象集合中的對象  
  6. {  
  7.      dict = (CCDictionary*)pObj;//  
  8.      if(!dict)  
  9.     break;  
  10.      const char* key = "playerBorn";//設定關鍵字,對應我們的"playerBorn"  
  11.      CCString *str = (CCString*)dict->objectForKey(key);  
  12.      if(str)  
  13.      {  
  14.          key = "x";  
  15.     float x = ((CCString*)dict->objectForKey(key))->floatValue();//獲取對應對象的x座標  
  16.     key = "y";  
  17.     float y = ((CCString*)dict->objectForKey(key))->floatValue();//獲取對應對象的y座標  
  18.     player->setPosition(ccp(x,y));//這裏player是我們的主角sprite對象,設置座標位置  
  19.           key = "hp";  
  20.          int Hp = ((CCString*)dict->objectForKey(key))->intValue();//獲得主角血量100  
  21.          player->setHp(Hp);  
  22.           break;//找到過後,退出循環  
  23.      }  

 這裏有個地方大家要注意,在編輯器上,我們的x,y屬性中的值是格子數,

比如

這裏,x是15,y是16,表示的是這個對象在地圖的16行15列的格子上,

但是在cocos2d-x中用讀取出來的就不是15,16了,而是自動乘過塊大小後在地圖上的像素值了,所以這就是爲什麼我設置主角setPosition的時候,直接用的轉換後的,xy值,而沒有再用他們去乘以tile塊的寬高的原因

基本使用就是這樣了,下一篇教大家如何處理斜45度角的地圖。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章