关闭

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

标签: 瓦片瓦片地图坐标变换cocos2dx
734人阅读 评论(0) 收藏 举报
分类:
//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*去掉就好,就像第一段代码那样句没有问题了。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:92701次
    • 积分:1285
    • 等级:
    • 排名:千里之外
    • 原创:34篇
    • 转载:3篇
    • 译文:0篇
    • 评论:26条
    最新评论