之前三篇地圖主要講的都是地圖繪製有關的部分,這一篇就講一講如果添加對象層,以及如何處理對象層的信息
我們點擊 圖層->添加對象層
這裏就會出現一個新的對象層,區別於圖層,用紫色標記
同樣的,我們更改下名字,變爲“object0”
光加了層沒用,我們還得在層上標記具體的對象
下面我們把光標點中“object0”對象層
我們可以看見工具欄有了變化
前面與圖層有關的按鈕變爲了灰色,後面與對象層有關的按鈕變亮了
點擊 “插入對象”
然後我們用鼠標在地圖上拖出一個框來,格子數多少可以自由決定
下面我們給對象添加屬性
右鍵點擊對象,彈出下框
點擊對象屬性
這裏上面第一排的名稱是方便在編輯器查看用的,因此最上面的“名稱”和類型處不填也可以。
下面我們加一個新的屬性,命名爲playerBorn吧,表示遊戲人物主角的出生地
值可以指定爲1,下面再定義個Hp的屬性,值寫個100,表示主角出生血量爲100
確定保存,之後加入到我們的遊戲工程目錄下
第二步:讀取屬性信息
- CCTMXObjectGroup* group = map->objectGroupName("object0");//第一步,獲取對象層
- CCArray* objects = group->getObjects();//獲取層上對象集合
- CCDictionary* dict = NULL;
- CCObject* pObj = NULL;
- CCARRAY_FOREACH(objects, pObj)//遍歷對象集合中的對象
- {
- dict = (CCDictionary*)pObj;//
- if(!dict)
- break;
- const char* key = "playerBorn";//設定關鍵字,對應我們的"playerBorn"
- CCString *str = (CCString*)dict->objectForKey(key);
- if(str)
- {
- key = "x";
- float x = ((CCString*)dict->objectForKey(key))->floatValue();//獲取對應對象的x座標
- key = "y";
- float y = ((CCString*)dict->objectForKey(key))->floatValue();//獲取對應對象的y座標
- player->setPosition(ccp(x,y));//這裏player是我們的主角sprite對象,設置座標位置
- key = "hp";
- int Hp = ((CCString*)dict->objectForKey(key))->intValue();//獲得主角血量100
- player->setHp(Hp);
- break;//找到過後,退出循環
- }
- }
這裏有個地方大家要注意,在編輯器上,我們的x,y屬性中的值是格子數,
比如
這裏,x是15,y是16,表示的是這個對象在地圖的16行15列的格子上,
但是在cocos2d-x中用讀取出來的就不是15,16了,而是自動乘過塊大小後在地圖上的像素值了,所以這就是爲什麼我設置主角setPosition的時候,直接用的轉換後的,xy值,而沒有再用他們去乘以tile塊的寬高的原因
基本使用就是這樣了,下一篇教大家如何處理斜45度角的地圖。