首先我们需要知道,tmx地图的坐标为格子坐标,左上角为原点(0,0),而cocos里面一般使用opengl坐标系,即左下角为原点(0,0)。
我们可以这样子来转换tmx地图和opengl的坐标:
Point HelloLayer::tiledCoorForPosition(const Point& position) //转成格子坐标
{
Size mapSize = _tiledMap->getMapSize();
Size tileSize = _tiledMap->getTileSize();
int x = (position.x ) / tileSize.width;
int y = (mapSize.height * tileSize.height - position.y ) / tileSize.height;
return Point(x,y);
}
Point HelloLayer::positionForTiledCoor(const Point& tiledCoor) //转成oepngl坐标
{
Size mapSize = _tiledMap->getMapSize();
Size tileSize = _tiledMap->getTileSize();
int x = tiledCoor.x * tileSize.width + tileSize.width / 2;
int y = (mapSize.height * tileSize.height) - (tiledCoor.y * tileSize.height + tileSize.height / 2);
return Point(x,y);
}
layer的锚点为(0,0),tmx地图的锚点默认是(0,0),如果我们在layer中添加tmx地图,比如这样子:
bool HelloLayer::init()
{
if(!Layer::init())
{
return false;
}
//地图
_tileMap = TMXTiledMap::create("map.tmx");
this->addChild(_tileMap);
//精灵
_sprite = Sprite::create("sp.png");
this.addChild(_sprite);
}