本文由qinning199原創,轉載請註明:http://www.cocos2dx.net/?p=79java
1、Tiled Maplinux
磚塊地圖爲了可以易用而建立,不管你的遊戲是一個RPG,仍是platformer(平臺遊戲)或者是Breakout clone均可以靈活的應用在cocos2dx中,cocos2dx支持由開源項目TiledMap Editor創做的地圖而且被存儲爲TMX格式。緩存
2、TMX 磚塊地圖格式編輯器
Cocos2d支持由Tiled創造的地圖。工具
Tiled有兩個版本:spa
一個是java項目,能夠運行在mac,window和linux中,是一個穩定的版本。.net
一個QT項目,幾乎支持全部java版本的功能。最新的QT版本號是0.4.0而且支持除了六邊形地圖以外的全部地圖。code
用哪一個版本你能夠本身決定,咱們建議使用QT版本,由於從如今開始這個版本是開發主線了,可是一些人也喜歡用java版本,由於不是全部舊的特性已經被移植過來了。orm
3、Cocos2d支持以下的TMX地圖:對象
方向:
正交地圖
等距地圖
六角地圖(邊在左右方向。邊在上下的不被支持。貌似Tiled不支持他們)
磚塊:
被嵌入的磚塊不被支持(是指:嵌入圖片的磚塊集)
僅僅被嵌入的磚塊集被支持(是指:磚塊集被嵌入,可是不是它的圖片)
每層支持至多一個磚塊集
圖層:
你能夠設置儘量多的圖層。
經過一個CCTMXLayer(是一個CCSpriteSheet的子類)每一層Layer都將會在內部被呈現出來。
每個磚塊能夠經過CCSprite(它的父類是CCTMXLayer)呈現出來。
對象組:
對象組也能夠被支持。
4、座標系和GIDS
座標系:
被用在64*32地圖中的座標系是:
(0,0):左上角
(63,31):右下角
GIDA
磚塊的GID是指磚塊的全局標識。這是一個無符號int,從1到磚塊的質量不等。
若是你有五種不一樣的磚塊,那麼:
Tile 0將會有GID 1
Tile 1將會有GID 2
Tile 2將會有GID 3
等等。
GID 0被用來展現一個空磚塊
5、如何創造一個TMX節點
// 建立TMX地圖 CCTMXTiledMap *map = CCTMXTiledMap::create("TileMaps/iso-test-vertexz.tmx"); addChild(map, 0, kTagTileMap); // 全部的地圖默認是失真的,若是你想建立非失真磚塊,你須要添加入下代碼: //遍歷全部的層(失真精靈管理者),而且設置他們爲非失真 CCArray * pChildrenArray = map->getChildren(); CCSpriteBatchNode* child = NULL; CCObject* pObject = NULL; CCARRAY_FOREACH(pChildrenArray, pObject) { child = (CCSpriteBatchNode*)pObject; if(!child) break; child->getTexture()->setAntiAliasTexParameters(); }
6、如何 get/add/delete/modify 一個磚塊
獲取一個磚塊在特定的座標:
CCTMXLayer* layer = map->layerNamed("Layer 0"); CCSprite *tile0 = layer->tileAt(ccp(1,63));
layer->setTileGID(m_gid, ccp((float)3, (float)3)); // 在特定座標移除磚塊 layer->removeTileAt( ccp(5.0, 5.0) );
CGSize s = layer->getLayerSize(); for( int x=0; x<s.width;x++) { for( int y=0; y< s.height; y++ ) { unsigned int tmpgid = layer->tileGIDAt(ccp(x,y)); layer->setTileGID(tmpgid+1,ccp(x,y)); } }
等距地圖和正交地圖都是適用的。可是對六角地圖不適用。
若是你的遊戲須要經過設置精靈的z值將精靈們放到特定磚塊的以前或者以後,那麼你又兩個選擇使用OpenGL ES深度緩衝
使用深度緩存
使用兩個TMX層來建立一個地圖是很是重要的:
草地圖層將會放到精靈以後。那麼它的vertexZ值應該是最低的值。好比:-1000.樹的磚塊圖層將會有不一樣的vertexZ值。在頂層的磚塊將會比在底層的磚塊有更高的vertexZ值。
那麼,爲了完成這些,你僅僅作以下這些就行:
打開Tiled
選擇背景圖層,好比草地
Tiled—-Layer—–Layer屬性
添加cc_vertexz=-1000
選擇前景北京,好比樹
Tiled—–Layer—–Layer屬性
添加cc_vertexz=automatic
8、Cocos2d例子:
![]() |
等距vertexZ例子。有兩個層:樹和草。爲樹層設置cc_vertex=automatic ,爲草層設置cc_vertexz=-1000 |
![]() |
正交頂點粒子。有兩個層,樹和草。爲樹層設置Cc_vertexz=automatic和cc_alpha_func=0.4,爲草層設置cc_vertexz=-1000 |
使用多層TMX層和z-順序
在地圖中的每一層都將自動的設置zOrder值,那麼在你的TMX編輯器中沒有必要添加任何圖層屬性。添加一個TMXMap的子精靈須要你去動態的放置層中的地圖對象。
CCSprite m_tamara = CCSprite::create(tamara.png); CCPoint p = m_tamara->getPosition(); p = CC_POINT_POINTS_TO_PIXELS; float newZ = -(p.y+32) /16; m_tamara->setVertexZ( newZ );
![]() |
正交地圖,能夠3D投射和消除鋸齒磚塊。使用精靈片修復工具磚塊被「修正」了。 |
![]() |
正交地圖。地圖的磚塊大小比實際磚塊小 |
![]() |
等比地圖。使用2d投影和失真磚塊 |
![]() |
六邊形地圖,2D投影和失真磚塊。邊在左右,上下的邊不被支持。 |