Tiled地圖編輯器支持普通視角地圖和45度角地圖, 它生成的地圖數據文件cocos2d-x完美的支持,Tiled地圖編輯器是一個以普通使用爲目標地圖編輯器,它使用簡單並且可以輕鬆地在不一樣的遊戲引擎中使用,其特性有:編輯器
一、使用基於XML編碼形的地圖數據文件使用可以在不一樣遊戲引擎中通用工具
二、支持普通、45度兩種視角this
三、對象的放置位置可以精確到像素編碼
四、支持圖素、層次和對象等通用概念spa
五、本身主動又一次加載圖素集code
六、可以重置圖素的大不和偏移對象
七、支持圖章刷和填充等高效工具blog
八、支持以通用的格式輸入輸出來打開和存儲文件排序
開始Tiled地圖編輯器編輯地圖遊戲
1、首先準備地圖素材文件放至projectResources下,下載安裝tiled-0.9.1-win32-setup.exe
2、啓動Tiled,選擇「文件-》新地圖」,來新建地圖project,彈出例如如下對話框設置地圖的大小和圖塊大小和地圖視角方向
3、選擇「地圖-》新圖塊」導入圖素文件,彈出例如如下對話框設置圖塊的大小、邊距、偏移量及圖塊名稱、源路徑
4、圖塊建立成功,右側顯示圖層名稱及圖塊窗體中的圖塊,將圖層名改動一下,點擊工具欄上圖章刷,點擊一圖塊開始畫地圖
5、在圖層窗體加入對象層並重命名,並在對象層加入對象,選中新建的對象層,點擊工具欄上「插入矩形」在地圖上畫一個矩形,大小可有可無,咱們主要用來在地圖
獲取該x,y座標,以在此放至精靈,右鍵剛剛加入矩形,選擇對象屬性,給它命個名稱,而後點擊肯定。
6、點擊保存地圖命名*.tmx至Resources
7、編敲代碼代碼:
CCTMXTiledMap瓦片地圖集類是cocos2d-x中支持Tiled地圖編碼數據文件形式的類,用於解析地圖集的數據文件。開始使用地圖,增長代碼:
CCTMXTiledMap *pTMXTiledMap = CCTMXTiledMap::create("map.tmx"); pTMXTiledMap->setScale(0.8f); pTMXTiledMap->setAnchorPoint( ccp(0.5f, 0.5f) ); pTMXTiledMap->setPosition(ccp(visibleSize.width/2 , visibleSize.height/2-300)); this->addChild(pTMXTiledMap);
執行結果:
8、Cocos2d-x 操做Tiled地圖常常用法
顯示Tiled地圖
CCTMXTiledMap *map = CCTMXTiledMap::create("map3.tmx"); map->setAnchorPoint( ccp(0.5f, 0.5f) ); map->setPosition(ccp(visibleSize.width/2, visibleSize.height/2)); this->addChild(map);
獲取地圖像素大小, width等於地圖寬度塊數*每塊寬度,height 等於地圖高度塊數*每塊高度
CCSize CC_UNUSED s = map->getContentSize(); CCLOG("ContentSize: %f, %f", s.width,s.height);
獲取地圖層
CCTMXLayer *layer = map->layerNamed("layer1");//參數:地圖層名稱 CCSize m = layer->getLayerSize();//地圖大小 CCLOG("LayerSize: %f, %f", m.width,m.height);
獲取對象層
CCTMXObjectGroup *object = map->objectGroupNamed("object1");//參數:對象層名稱
獲取對象
CCDictionary *sprite_object = object->objectNamed("sprite1");//參數:對象名稱
獲取對象座標
float x = ((CCString*)sprite_object->objectForKey("x"))->floatValue(); float y = ((CCString*)sprite_object->objectForKey("y"))->floatValue();
在座標處增長精靈
CCSprite *sprite = CCSprite::create("sprite.png"); sprite->setScale(0.5f); sprite->setAnchorPoint(ccp(0.0f, 0.0f)); sprite->setPosition(ccp(x, y)); this->addChild(sprite);
當有多個地圖層時,遍歷地圖層
CCArray* pChildrenArray = map->getChildren(); CCSpriteBatchNode* child = NULL; CCObject* pObject = NULL; CCARRAY_FOREACH(pChildrenArray, pObject) { child = (CCSpriteBatchNode*)pObject; if(!child) break; child->getTexture()->setAntiAliasTexParameters(); }
當有對象層有多個對象時,遍歷所有對象
CCArray *obs = object->getObjects(); CCDictionary *dict=NULL; CCObject *ob = NULL; CCARRAY_FOREACH(obs, ob) { dict = (CCDictionary *)ob; if (!dict) break; int y = ((CCString*)dict->objectForKey("y"))->floatValue(); int x = ((CCString*)dict->objectForKey("x"))->floatValue(); int w = ((CCString*)dict->objectForKey("width"))->floatValue(); int h = ((CCString*)dict->objectForKey("height"))->floatValue(); CCLOG("sprite x: %d, y: %d, w: %d, h: %d", x, y, w, h); }
最後結果圖:
普通視角獲取地圖層四角圖素
CCTMXLayer *layer = map->layerNamed("layer1") ; CCSize s = layer->getLayerSize(); CCSprite* sprite; sprite = layer->tileAt(ccp(0,0)); sprite->setScale(2); sprite = layer->tileAt(ccp(s.width-1,0)); sprite->setScale(2); sprite = layer->tileAt(ccp(0,s.height-1)); sprite->setScale(2); sprite = layer->tileAt(ccp(s.width-1,s.height-1)); sprite->setScale(2);
m_tamara = CCSprite::create("nan.png"); map->addChild(m_tamara, map->getChildren()->count() );//將精靈做爲子節點增長
//改動z軸的值並排序 CCPoint p = m_tamara->getPosition(); p = CC_POINT_POINTS_TO_PIXELS(p); CCNode *map = getChildByTag(kTagTileMap); int newZ = 4 - (p.y / 48); newZ = max(newZ,0); map->reorderChild(m_tamara, newZ);