CCTMXTiledMap:

瓦片上地图集类具有如下几个特性:

1,每个图素都是一个精灵

2,每个图素的精灵类在需要时调用tiltAt函数被创建

3.,每个图素都可以进行旋转缩放等设置

4,在运行时可以添加和删除

5,可以修改Z轴顺序来改变遮挡关系

6,每个图素都可以设置锚点

7.,每个层都可以添加节点

8,每个图素都可以有唯一的标签

9,每个图素都可以有唯一的Z轴值


如下在利用工具创建了一个tmx文件,我们利用CCTMXTiledMap类来解析它,例子代码如下:

void MyMapLayer::initLayer() {
    CCSize winSize = CCDirector::sharedDirector()->getWinSize();
    CCTMXTiledMap *map = CCTMXTiledMap::create("TileMaps/orthogonal-test4.tmx");
    this->addChild(map, 1, 1);
    map->setAnchorPoint(ccp(0.5f, 0.5f));
    map->setPosition(ccp(winSize.width / 2.0f, winSize.height / 2.0f));

    CCArray *arratSprite = map->getChildren(); // get the sprite objects from the map
    int iCount = arratSprite->count();
    CCSpriteBatchNode *batchChild = NULL;
    CCObject *object = NULL;

    CCARRAY_FOREACH(arratSprite, object) {
        batchChild = (CCSpriteBatchNode *)(object);
        if(batchChild == NULL) {
            break;
        } 
        batchChild->getTexture()->setAntiAliasTexParameters(); // set the sprite抗锯齿
    }
    map->setScale(2.0f);
    //
    arrayAllSprites = CCArray::create(4);
    mapLayer = map->layerNamed("Layer 0");
    CCSize layerSize = mapLayer->getLayerSize();
    CCSprite *sprite = mapLayer->tileAt(ccp(0, 0));//获得相应位置的精灵
    arrayAllSprites->addObject(sprite);
    mapLayer->removeChild(sprite, true);

    sprite = mapLayer->tileAt(ccp(0, layerSize.height - 1));
    arrayAllSprites->addObject(sprite);
    mapLayer->removeChild(sprite, true);

    sprite = mapLayer->tileAt(ccp(layerSize.width - 1, layerSize.height - 1));
     arrayAllSprites->addObject(sprite);
    mapLayer->removeChild(sprite, true);

    sprite = mapLayer->tileAt(ccp(layerSize.width - 1, 0));
    arrayAllSprites->addObject(sprite);
    mapLayer->removeChild(sprite, true);
    removeSprite(1);

}




再举个例子,我们让它取得精灵在layer层进行穿梭:

CCSprite *sprite = mapLayer->tileAt(ccp(0, 0));
    arrayAllSprites->addObject(sprite);

    CCActionInterval *action = CCMoveBy::create(4, ccp(50, -50));
    sprite->runAction(CCRepeatForever::create(dynamic_cast<CCActionInterval *>(CCSequence::create(action, action->reverse(), NULL))));

    float width_size = layerSize.width / 14;//这里要注意了,我这里取得的是像素点的大小
    CCSprite *sprite1 = mapLayer->tileAt(ccp(width_size, 0));
    mapLayer->reorderChild(sprite1, 10);
    CCActionInterval *action1 = CCMoveBy::create(4, ccp(50, 50));
    sprite1->runAction(CCRepeatForever::create(dynamic_cast<CCActionInterval *>(CCSequence::create(action1, action1->reverse(), NULL))));




在tmx地图中,每一个tile其实就是一个CCSprite,我们都可以通过CCTMXLayer根据tile的坐标获取它的CCSprite,并对tile进行调整。


还可以利用CCTMXObjectGroup来获取TMX中的Objects,例子代码:

CCTMXTiledMap *map = CCTMXTiledMap::create(/*"TileMaps/iso-test-zorder.tmx"*/"TileMaps/ortho-objects.tmx");
     map->setAnchorPoint(ccp(0.5f, 0.5f));
     map->setPosition(ccp(winSize.width / 2.0f, winSize.height / 2.0f + 150));
     CCTMXObjectGroup *group = map->objectGroupNamed("Object Group 1");
     CCArray *arraySprite = group->getObjects();