瓦片地图,通过像素坐标返回瓦片坐标的函数

//tiledmap是一个全局变量,要在.h文件中定义TMXTiledMap* tiledmap
tiledmap = TMXTiledMap::create("map.tmx");

 cocos2d::Vec2 HelloWorld::tiledCoordFromPosition(cocos2d::Vec2 position)
{
    int x = position.x/tiledmap->getTileSize().width;
    int y = (tiledmap->getTileSize().height*tiledmap->getMapSize().height-position.y)/tiledmap->getTileSize().height;
    return Vec2(x,y);
}
  • 函数放回类型cocos2d::Vec2,HelloWorld类名,tiledCoordFromPosition函数名,参数是cocos2d::Vec2类型
  • 该瓦片在地图中(原点在左上角)x轴坐标的像素position.x除以单个瓦片像素尺寸的宽tiledmap->getTileSize().width
  • 单个瓦片像素尺寸的高tiledmap->getTileSize().height乘以地图中高度的瓦片个数tiledmap->getMapSize().height即整个地图高的像素,减去该瓦片在地图中y轴的坐标position.y,得到的即该瓦片在OpenGL(原点在左下角,cocos2dx默认的坐标)坐标下y轴的像素值,最后再除以单个瓦片像素尺寸的高tiledmap->getTileSize().height

我在调试的时候犯了一个特别基础的错误,我在.h文件定义了全局变量TMXTiledMap* tiledmap,然后又在.cpp文件里面这样给他初始化,代码如下:

//.h定义了tiledmap,再这样声明变量初始化,会出错!!!
TMXTiledMap* tiledmap = TMXTiledMap::create("map.tmx");

结果调试了半天都不行,后来才发现是重复定义了,导致的结果是map.tmx地图虽然可以正常地在屏幕中显示,但是却无法获得tiledmap里面的瓦片参数,调试一直出错误。解决的办法很简单,就是把.cpp里面的TMXTiledMap*去掉就好,就像第一段代码那样句没有问题了。

你可能感兴趣的:(cocos2dx,瓦片,坐标变换,瓦片地图)