[Cocos2D-x For WP8]Tile Map建立地圖

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

運行的效果:

相關文章
相關標籤/搜索