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() //获得所有对象