Cocos2d-x Tiled地圖編輯器(一)基本使用


Tiled地圖編輯器支持普通視角地圖和45度角地圖, 它生成的地圖數據文件cocos2d-x完美的支持,Tiled地圖編輯器是一個以普通使用為目標地圖編輯器,它使用簡單而且能夠輕松地在不同的游戲引擎中使用,其特性有:

1、使用基於XML編碼形的地圖數據文件使用能夠在不同游戲引擎中通用

2、支持普通、45度兩種視角

3、對象的放置位置能夠精確到像素

4、支持圖素、層次和對象等通用概念

5、自己主動又一次加載圖素集

6、能夠重置圖素的大不和偏移

7、支持圖章刷和填充等高效工具

8、支持以通用的格式輸入輸出來打開和存儲文件

 

開始Tiled地圖編輯器編輯地圖

一、首先准備地圖素材文件放至projectResources下,下載安裝tiled-0.9.1-win32-setup.exe

地址:http://www.mapeditor.org/

 

二、啟動Tiled,選擇“文件-》新地圖”,來新建地圖project,彈出例如以下對話框設置地圖的大小和圖塊大小和地圖視角方向



三、選擇“地圖-》新圖塊”導入圖素文件,彈出例如以下對話框設置圖塊的大小、邊距、偏移量及圖塊名稱、源路徑



四、圖塊創建成功,右側顯示圖層名稱及圖塊窗體中的圖塊,將圖層名改動一下,點擊工具欄上圖章刷,點擊一圖塊開始畫地圖



五、在圖層窗體加入對象層並重命名,並在對象層加入對象,選中新建的對象層,點擊工具欄上“插入矩形”在地圖上畫一個矩形,大小無關緊要,我們主要用來在地圖

獲取該x,y坐標,以在此放至精靈,右鍵剛剛加入矩形,選擇對象屬性,給它命個名稱,然后點擊確定。





六、點擊保存地圖命名*.tmx至Resources


七、編敲代碼代碼:

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);


執行結果:

 

 

八、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); 



 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM