加载map:
CCTMXTiledMap *map = CCTMXTiledMap::create("map3.tmx");
map->setAnchorPoint( ccp(0.5f, 0.5f) );
map->setPosition(ccp(visibleSize.width/2, visibleSize.height/2));
this->addChild(map);
获取图层:
CCTMXLayer *layer = map->layerNamed("layer1");//参数:地图层名称
CCSize m = layer->getLayerSize();//地图大小
CCLOG("LayerSize: %f, %f", m.width,m.height);
当有多个图层时,遍历图层:
CCArray* pChildrenArray = map->getChildren();
CCSpriteBatchNode* child = NULL;
CCObject* pObject = NULL;
CCARRAY_FOREACH(pChildrenArray, pObject)
{
child = (CCSpriteBatchNode*)pObject;
if(!child)
break;
child->getTexture()->setAntiAliasTexParameters();
}
获取对象:
<pre name="code" class="cpp">CCTMXObjectGroup *object = map->objectGroupNamed("object1");//参数:对象层名称
CCDictionary *sprite_object = object->objectNamed("sprite1");//参数:对象名称
当有对象层有多个对象时,遍历所有对象:
CCArray *obs = object->getObjects();
CCDictionary *dict=NULL;
CCObject *ob = NULL;
CCARRAY_FOREACH(obs, ob)
{
dict = (CCDictionary *)ob;
if (!dict)
break;
int y = ((CCString*)dict->objectForKey("y"))->floatValue();
int x = ((CCString*)dict->objectForKey("x"))->floatValue();
int w = ((CCString*)dict->objectForKey("width"))->floatValue();
int h = ((CCString*)dict->objectForKey("height"))->floatValue();
CCLOG("sprite x: %d, y: %d, w: %d, h: %d", x, y, w, h);
}
获取图素GID值并获取GID的键值:
int tilegid = layer->tileGIDAt(tilecoord);//获取图素GID值
if (tilegid)
{
CCDictionary *properties = map->propertiesForGID(tilegid) ;//根据GID值获取图素属性键值集合
if (properties)
const CCString *str = properties->valueForKey("value(GID)");//键值称
}
视角跟随精灵移动:
void HelloWorld::setViewpointCenter(CCPoint position)
{
CCSize winSize = CCDirector::sharedDirector()->getWinSize();
float x = MAX(position.x, winSize.width / 2);
float y = MAX(position.y, winSize.height / 2);
x = MIN(x, (map->getMapSize().width*map->getTileSize().width) - winSize.width / 2);
y = MIN(y, (map->getMapSize().height*map->getTileSize().height)- winSize.height / 2);
CCPoint acturalPosition = ccp(x, y);
CCPoint centerView = ccp(winSize.width / 2, winSize.height / 2);
CCPoint viewPoint = ccpSub(centerView, acturalPosition);
this->setPosition(viewPoint);
}
将坐标转换成tile坐标:
CCPoint HelloWorld::tileCoordForPosition(CCPoint position)
{
int x = position.x / map->getTileSize().width;
int y = ((map->getMapSize().height * map->getTileSize().height) - position.y) / map->getTileSize().height;
return ccp(x, y);
}