• [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是可以对地图进行分层等。

    那么下面我们主要是讲怎么在游戏里面去使用地图文件。

    1、在VS2012上面添加地图文件,这个和添加其他的图片资源文件的操作一样,复制到Asset文件夹,然后添加到项目里面,那么在这里要注意的一点是,把.tmx添加到项目的时候,它的content属性是false的,这时候需要我们手工把它改成true,否则地图会无法显示出来,如下图所示:

    2、使用.tmx文件创建地图,然后就可以往地图上添加精灵了,操作精灵的运动,和把精灵在地图的那个一个层上面。

    //创建地图

    CCTMXTiledMap *map = CCTMXTiledMap::create("iso-test-zorder.tmx");

    //在地图上添加精灵

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

    运行的效果:

  • 相关阅读:
    2020.4.21 考试T1 HDU 5729
    BZOJ 4198: [Noi2015]荷马史诗
    BZOJ 1052: [HAOI2007]覆盖问题
    BZOJ 1087: [SCOI2005]互不侵犯King
    BZOJ 4466 线性函数
    Linux如何挂载U盘
    集中式日志分析平台
    ELK5.2+kafka+zookeeper+filebeat集群部署
    浅析ES的_source、_all、store、index
    IndexOf、LastIndexOf、Substring的用法
  • 原文地址:https://www.cnblogs.com/linzheng/p/3293156.html
Copyright © 2020-2023  润新知