在Cocos2D-x裏面建立Tile Map地圖是須要用到.tmx的地圖文件的,那麼建立Tile Map地圖文件,咱們能夠經過地圖編輯器來建立,地圖編輯器能夠在網站:http://www.mapeditor.org 上進行下載,而後經過地圖編輯器就能夠導入.tmx的地圖文件。那麼爲何咱們不直接用圖片做爲地圖呢,而是使用.tmx文件來建立地圖。那麼有一個很重要的緣由就是由於使用Tile Map地圖不管你的地圖多大,內存佔用只是每一個不一樣Tile的總和,因此使用Tile Map是很是省內存的一種作法。固然了Tile Map地圖的功能能夠實現的效果要比單純的圖片要更加豐富,好比Tile Map是能夠對地圖進行分層等。編輯器
那麼下面咱們主要是講怎麼在遊戲裏面去使用地圖文件。動畫
一、在VS2012上面添加地圖文件,這個和添加其餘的圖片資源文件的操做同樣,複製到Asset文件夾,而後添加到項目裏面,那麼在這裏要注意的一點是,把.tmx添加到項目的時候,它的content屬性是false的,這時候須要咱們手工把它改爲true,不然地圖會沒法顯示出來,以下圖所示:網站
二、使用.tmx文件建立地圖,而後就能夠往地圖上添加精靈了,操做精靈的運動,和把精靈在地圖的那個一個層上面。spa
//建立地圖code
CCTMXTiledMap *map = CCTMXTiledMap::create("iso-test-zorder.tmx");對象
//在地圖上添加精靈blog
map->addChild(cat, map->getChildren()->count() );排序
//更新精靈位於那個地圖的層上遊戲
map->reorderChild(cat, newZ); 圖片
示例代碼:
TestLayer::TestLayer() { //建立一個CCTMXTiledMap CCTMXTiledMap *map = CCTMXTiledMap::create("iso-test-zorder.tmx"); addChild(map, 0, 1); //獲取地圖的大小 CCSize s = map->getContentSize(); map->setPosition(ccp(0,0)); //在地圖上添加精靈 cat = CCSprite::create("cat.png"); map->addChild(cat, map->getChildren()->count() ); //若是tile map中有多個層,把這些層加入其餘對象中時必定要先retain cat->retain(); int mapWidth = map->getMapSize().width * map->getTileSize().width; cat->setPositionInPixels(ccp( mapWidth/2,0)); cat->setAnchorPoint(ccp(0.5f,0)); //建立精靈運動的動畫 CCActionInterval* move = CCMoveBy::create(10, ccpMult(ccp(300,250), 1/CC_CONTENT_SCALE_FACTOR())); CCActionInterval* back = move->reverse(); CCFiniteTimeAction* seq = CCSequence::create(move, back,NULL); cat->runAction( CCRepeatForever::create((CCActionInterval*) seq) ); schedule( schedule_selector(TestLayer::repositionSprite) ); } void TestLayer::repositionSprite(ccTime dt) { CCPoint p = cat->getPositionInPixels(); CCNode *map = getChildByTag(1); // there are only 4 layers. (grass and 3 trees layers) // if tamara < 48, z=4 // if tamara < 96, z=3 // if tamara < 144,z=2 int newZ = 4 - (p.y / 48); newZ = max(newZ,0); //更新層次關係,底層會從新排序 map->reorderChild(cat, newZ); }
運行的效果: