cocos2d-x支持使用Tiled地圖編輯器創建TMX格式的地圖
下載完成之後,直接安裝完成。
怎麼使用地圖編輯器,參考官網文檔。
一、現在怎麼把Tiled地圖加載到cocos2d-x的場景中
在.h文件添加一下成員變量
private:
Sprite*
m_rSprite
TMXTiledMap*
m_gGameMap; //
void initMap();
//地圖初始化
在.cpp文件做如下操作
bool GameFatherLayer::init(){
if ( !Layer::init() )
{
return false;
}
initMap();
return ture;
}
void GameFatherLayer::initMap()
{
m_gGameMap = TMXTiledMap::create("tile.tmx");
m_gGameMap->setPosition(Vec2::ZERO);
this->addChild(m_gGameMap);
}
在這裏我們調用的是TMXTiledMap類的靜態方法把我們創建的地圖加載到我們的遊戲場景裏。
TMXTileMap類是繼承自Node類,所以他有Node類的屬性,下面我們看TMXTiledMap的一些常用的方法:
1、TMXLayer* getLayer(const std::string & LayerName); //通過層名獲得層對象
2、TMXObjectGroup* getObjectGroup(const std:: &groupName); //通過層名獲得層中對象組集合
3、Size& getMapSize(); //獲得地圖尺寸,他的單位是瓦片
4、Size& getTileSize() //獲得瓦片的尺寸,他的單位是像素
二、把Tiled地圖的對象層role座標在遊戲裏使用
void GameFatherLayer::extraInit()
{
TMXObjectGroup* group = m_gGameMap ->getObjectGroup("obj");
auto valueMap = group->getObject("role");
float x = valueMap.at("x").asFloat();
float y = valueMap.at("y").asFloat();
m_rSprite = Sprite::create("hero.png");
m_rSprite->setPosition(Vec2(x,y));
m_rSprite->setAnchorPoint(Vec2::ZERO);
m_gGameMap ->addChild(m_rSprite,ROLE_ZORDER);
}
注意我們通過getObjectGroup方法來獲得對象層,它返回一個特殊的TMXObjectGroup對象。
然後我們調用TMXObjectGroup的方法來獲取一個ValueMap,這Map裏包含了關於對象的大量信息,包括我們上面用的x和y的座標值,還有寬度和高度等,如果我們是設置位置的話我們只要關心x和y就行了。
TMXObjectGroup並不是繼承Node類這是要注意的,下面我們看TMXObjectGroup的一些常用的方法:
1.Value getProperty(const std::string &PropertyName); //通過屬性名獲得屬性值
2.ValueMap getObject(const std::String &ObjectName); //通過對象層獲得對象信息
3.ValueMap getProperties() //獲得對象屬性
4.ValueVector getObjects() //獲得所有對象