TileMap制作地图,在点击屏幕时,如何确定点击的是地图中哪个地图块

TileMap制作地图,在点击屏幕时,如何确定点击的是地图中哪个地图块

用 convertTouchToNodeSpace 获取 坐标

在 仔细 研究 cpp-tests 中TileMapTest例子。

版主,我目前的做法是首先通过convertTouchToNodeSpace ,将触摸的屏幕坐标转换成世界坐标;然后,再将世界坐标转换至对应的Tile图块坐标(参考的是:http://blog.csdn.net/chenpolu/article/details/18958189中的tileCoordForPosition方法)。
这种做法在地图不移动的情况下是可以的。但是,一旦地图发生移动,那么就发生错误,即获取到的点击图块是不对的。请问在地图移动的情况下,该如何解决呢?

版主,我目前的做法是首先通过convertTouchToNodeSpace ,将触摸的屏幕坐标转换成世界坐标;然后,再将世界坐标转换至对应的Tile图块坐标(参考的是:http://blog.csdn.net/chenpolu/article/details/18958189中的tileCoordForPosition方法)。
这种做法在地图不移动的情况下是可以的。但是,一旦地图发生移动,那么就发生错误,即获取到的点击图块是不对的。请问在地图移动的情况下,该如何解决呢?

你做到这一步说明你方向是对的。
convertTouchToNodeSpace 这个函数,我觉得你还未理解深刻。

为何要先转换到世界坐标?直接转化为map坐标系啊,你这样转来转去,不晕么:9:

:883::883:

void GameMap::onTouchBegan(const std::vector<Touch*>& touches, Event *event){
auto node0=bgBackNode->getChildByTag(map_Node_flag_0);

auto __map=dynamic_cast<cocos2d::experimental::TMXTiledMap*>(node0);


// 转化为map坐标系
auto  mapPoint=node0->convertTouchToNodeSpace(touches);


 //获取层
 auto layer = __map->getLayer("background");


  //tile 坐标和  GL坐标   Y 是倒过来的,so  也要倒过来一下
 float hei=layer->getContentSize().height-mapPoint.y;


 //地块的长 宽
 int blockWei=64;
 int blockHei=64;
 

 //地块 的行和列 
 int kx=mapPoint.x/=blockWei;
 int ky=(hei)/=blockHei;
 

 //测试 点击的块 缩小%50

 auto    sprite = layer->getTileAt(Vec2(kx,ky));
 sprite->setScale(0.5f);

}

简单测试函数。。。。希望对你有点启发。:14:

太谢谢版主了。你的解答对我的帮助很大,真心谢谢你。