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

运行的效果:

相关文章
相关标签/搜索