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