Tile Map 就是瓦片地图。一般使用Tile Map 编辑器来制作。Tile Map 可以在官网下载。
创建好的Tile Map 是tmx的文件。
tile map包含两种图层。
一种就是tile。这个是背景。
第二种是object。包含的是对象。
使用方式很简单。跟图片没什么差别。只是代码有多不同
std::string file = "TileMap.tmx";
auto str = String::createWithContentsOfFile(FileUtils::getInstance()->fullPathForFilename(file.c_str()).c_str());
auto _tileMap = TMXTiledMap::createWithXML(str->getCString(),"");
addChild(_tileMap, -1);
如此简单的几句代码。便可以将编辑好的地图载入。
有几点是要注意的。
1.坐标问题。Tile Map的坐标是自左上上角开始的。
这个在程序中没有太多的体现。
当然了。当你获取title里的对象的坐标时。这个坐标是相对屏幕的。假设锚点都是0,比如说title 的坐标是(-10,-10)你获取到的对象的坐标是(10,10)实际上。这个(10,10)是相对屏幕的。那么实际上。它如果以tile 的锚点作为参照。那它在tile上的坐标就是(20,20)了
2.两个容易混淆的函数
_tileMap->getMapSize() 这个函数是获取tile map 的块数的。瓦片地图就是一块一块的。这个函数返回的就是块数
_tileMap->getTileSize()这个函数是获取每一块瓦片的大小。以像素为单位。
所以实际上。tile map 的大小就是两者的乘积
3常用的函数
TMXLayer* _background = _tileMap->layerNamed("Background"); 这个是获取tile 层的
auto objects = _tileMap->getObjectGroup("Objects");//获取对象层
auto spobject = objects->getObject("SpawnPoint");//根据对象名获取对象
int x = spobject["x"].asInt();//获取对象的坐标位置
int y = spobject["y"].asInt();