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坐标系啊,你这样转来转去,不晕么
: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);
}
简单测试函数。。。。希望对你有点启发。
太谢谢版主了。你的解答对我的帮助很大,真心谢谢你。