cocos2dx TMX地图

auto map = TMXTiledMap::create("map.tmx");  //加载地图

    auto mapSize = map->getMapSize();  //获取地图大小

    this->addChild(map);    //添加到当前

    auto mapProperties = map->getProperties(); //获取地图属性

    cclOG("%s",mapProperties["type"].asstring().c_str());  //获取type

    auto sceneLayer = map->getLayer("scene");   //获取图层scene

    auto layerProperties = sceneLayer->getProperties();  //获取图层信息

    cclOG("%s",layerProperties["type"].asstring().c_str());

    auto tileProperties = map->getPropertiesForGID(1).asValueMap();  //获取一个图块的信息

    cclOG("%s",tileProperties["type"].asstring().c_str());

    auto objectGroup = map->getobjectGroup("object");   //获取object对象的对象组

    auto objectPlayer = objectGroup->getobject("player"); //获取player对象

    cclOG("%s",objectPlayer["type"].asstring().c_str());

    auto objectColor = objectGroup->getobject("color"); //获取color对象

    auto colorX = objectColor["x"].asInt() / 32;
    auto colorY = objectColor["y"].asInt() / 32;
    auto colorW = objectColor["width"].asInt() / 32;
    auto colorH = objectColor["height"].asInt() / 32;

    for (int i = colorX; i < colorX + colorW; i++){
        for (int k = colorY; k < colorY + colorH; k++){

            auto sprite = sceneLayer->getTileAt(Vec2(i,mapSize.height - k - 1));  //获取瓦块

            sprite->setColor(Color3B(255,0,0)); //修改瓦块

        }
    }

    auto player = Sprite::create("c.png");

    player->setPosition(objectPlayer["x"].asFloat(),objectPlayer["y"].asFloat());

    this->addChild(player);

    auto listener = EventListenerTouchOneByOne::create();  //

    listener->onTouchBegan = [player](Touch *touch,Event* event){

        auto target = (TMXTiledMaP*)event->getCurrentTarget();

        auto sceneLayer = target->getLayer("scene");

        auto point = target->convertToNodeSpace(touch->getLocation()); //世界坐标转map本地坐标

        point.x = int(point.x / 32);
        point.y = target->getMapSize().height - int(point.y / 32) - 1;


        auto tileGID = sceneLayer->getTileGIDAt(point);  //获取瓦块的GID

        auto tile = target->getPropertiesForGID(tileGID).asValueMap();  //获取图块信息

        if (tile["move"].isNull() != true && tile["move"].asBool() == true){  //判断是否可以移动
            player->setPosition(target->convertToNodeSpace(touch->getLocation()));
        }
        return false;
    };

    Director::getInstance()->getEventdispatcher()->addEventListenerWithSceneGraPHPriority(listener,map);

相关文章

    本文实践自 RayWenderlich、Ali Hafizji 的文章《...
Cocos-code-ide使用入门学习地点:杭州滨江邮箱:appdevzw@1...
第一次開始用手游引擎挺激动!!!进入正题。下载资源1:从C...
    Cocos2d-x是一款强大的基于OpenGLES的跨平台游戏开发...
1.  来源 QuickV3sample项目中的2048样例游戏,以及最近《...
   Cocos2d-x3.x已经支持使用CMake来进行构建了,这里尝试...