地图系统

    //创建地图并添加
    auto map = TMXTiledMap::create("TileMaps/orthogonal-test1.tmx");
    addChild(map, 0, kTagTileMap);

    //得到地图上的图层 并遍历
    auto& children = map->getChildren();
    SpriteBatchNode* child = nullptr;

    for(const auto &obj : children) {
        child = static_cast<SpriteBatchNode*>(obj);
        //图片在放大的时候会出现锯齿。纹理类提供了
        //setAntiAliasTexParameters()函数来处理抗锯齿
        child->getTexture()->setAntiAliasTexParameters();
    }
    //从地图中根据图层名字获取图层
    auto layer = map->getLayer("Layer 0");

    //从图层上根据位置获取精灵
    auto s = layer->getLayerSize();
    Sprite* sprite;
    sprite = layer->getTileAt(Vec2(0,0));
    sprite->setScale(2);//放大
    sprite = layer->getTileAt(Vec2(s.width-1,0));//右上角
    sprite->setScale(2);

    //得到指定位置的GID  GID将代表这个位置的东西
    auto c = layer->getTileGIDAt(Vec2(0, 6));
    auto b = layer->getTileGIDAt(Vec2(1, 6));
    //用GID代表的东西 替换掉指定位置
    layer->setTileGID(c, Vec2(1, 6));
    layer->setTileGID(b, Vec2(0, 6));

    auto c = layer->getTileGIDAt(Vec2(0, 6),(TMXTileFlags*)&flags);
    if (flags & kTMXTileVerticalFlag)
        flags &= ~kTMXTileVerticalFlag;
    else
        flags |= kTMXTileVerticalFlag;
    layer->setTileGID(c, Vec2(0, 6), (TMXTileFlags)flags);

    //给地图添加精灵并设置层次
    Sprite *_tamara = Sprite::create(s_pathSister1);
    map->addChild(_tamara, (int)map->getChildren().size() );
    _tamara->retain();
    int mapWidth = map->getMapSize().width * map->getTileSize().width;
    _tamara->setPosition(CC_POINT_PIXELS_TO_POINTS(Vec2( mapWidth/2,0)));
    _tamara->setAnchorPoint(Vec2(0.5f,0));

    int newZ = 4 ;
    //设置Z轴 用于精灵被挡住 
    map->reorderChild(_tamara, newZ);   

    //获取对象层 并遍历 改变
    auto group = map->getObjectGroup("Object Group 1");

    auto& objects = group->getObjects();

    Value objectsVal = Value(objects);
    CCLOG("%s", objectsVal.getDescription().c_str());

    auto drawNode = DrawNode::create();

    for (auto& obj : objects)
    {
        ValueMap& dict = obj.asValueMap();

        float x = dict["x"].asFloat();
        float y = dict["y"].asFloat();
        float width = dict["width"].asFloat();
        float height = dict["height"].asFloat();

        Color4F color(1.0, 1.0, 1.0, 1.0);

        drawNode->drawLine( Vec2(x, y), Vec2((x+width), y), color );
        drawNode->drawLine( Vec2((x+width), y), Vec2((x+width), (y+height)), color );
        drawNode->drawLine( Vec2((x+width), (y+height)), Vec2(x, (y+height)), color );
        drawNode->drawLine( Vec2(x, (y+height)), Vec2(x, y), color );
    }
    map->addChild(drawNode, 10);








    auto map = TileMapAtlas::create("TileMaps/tiles.png", "TileMaps/levelmap.tga", 16, 16);
    addChild(map, 0, kTagTileMap);
    schedule(CC_SCHEDULE_SELECTOR(HelloWorld::updateMap), 0.2f);


void HelloWorld::updateMap(float dt)
{
    auto tilemap = (TileMapAtlas*)getChildByTag(kTagTileMap);

    //
    // For example you can iterate over all the tiles
    // using this code, but try to avoid the iteration
    // over all your tiles in every frame. It's very expensive
    //    for(int x=0; x < tilemap.tgaInfo->width; x++) {
    //        for(int y=0; y < tilemap.tgaInfo->height; y++) {
    //            Color3B c =[tilemap tileAt:Size(x,y));
    //            if( c.r != 0 ) {
    //                ----CCLOG("%d,%d = %d", x,y,c.r);
    //            }
    //        }
    //    }

    // NEW since v0.7
    Color3B c = tilemap->getTileAt(Vec2(13, 21));
    c.r++;
    c.r %= 50;
    if (c.r == 0)
        c.r = 1;

    // NEW since v0.7
    tilemap->setTile(c, Vec2(13, 21));
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值