/**
* 将触点转换成tileMap地图方块坐标
* @param tileMap cc.tiledMap 组件
* @param x 触点转换为tileMap节点坐标系下的x坐标
* @param y 触点转换为tileMap节点坐标系下的y坐标
* @returns {x:number,y:number} 地图方块坐标
*/
public static mathPointToMap(tileMap: cc.TiledMap, x: number, y: number): { x: number, y: number } {
let tilesize = tileMap.getTileSize();
let halfW = tilesize.width / 2;
let haflH = tilesize.height / 2;
let xiebian = Math.sqrt(Math.pow(halfW, 2) + Math.pow(haflH, 2));
let cos = halfW / xiebian * xiebian;
let sin = haflH / xiebian * xiebian;
let mapx: number, mapy: number;
//节点锚点x到tileMap地图锚点x的偏移值/2
let xoffset = tileMap.node.getContentSize().width * (0.5 - tileMap.node.getAnchorPoint().x);
//节点锚点x到tileMap地图锚点y的偏移值/2
let yoffset = tileMap.node.getContentSize().height * (1 - tileMap.node.getAnchorPoint().y);
let diffx = x - xoffset;
let diffy = -(y - yoffset);
let { x: mx, y: my } = { x: 0, y: 0 }
mapx = (1 / 2) * (diffx / cos + diffy / sin) + mx;
mapy = (1 / 2) * (diffy / sin - diffx / cos) + my;
return { x: Math.floor(mapx), y: Math.floor(mapy) };
}
/**
* 将砖块坐标转换成节点坐标
* @param tilePos tile方块在父节点坐标系的坐标,以(0,0)锚点为计算
* @param tileMap 父节点
* @returns
*/
public static tileToNode(tileMap: cc.TiledMap, tilePos: cc.Vec2) {
let x: number, y: number;
//父节点宽高的一半
let halfW = tileMap.node.width / 2;
let halfH = tileMap.node.height / 2;
//算出以锚点0.5的坐标偏移值
let offsetX = tilePos.x - halfW;
let offsetY = tilePos.y - halfH;
//得出最终坐标
x = offsetX >= 0 ? Math.abs(offsetX) : -Math.abs(offsetX);
y = offsetY >= 0 ? Math.abs(offsetY) : -Math.abs(offsetY);
let tileSize = tileMap.getTileSize();
x += tileSize.width / 2;
y += tileSize.height / 2;
return new cc.Vec2(x, y);
}
03-21
2111
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)