Creator 45度格子坐标转换

/**
     * 将触点转换成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);
    }

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值