cocos2dx之CCTMXTiledMap

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值