您的位置:首页 > 移动开发 > Cocos引擎

cocos2dx TMX地图

2016-03-12 17:45 429 查看
[code]    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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: