TiledLayer.getPositionAt() 方法使用感想, 文档写的不好

项目用到 tiledmap, cocos 算是新手, 于是按照文档一点一点的使用, 做到获取 tiled 的世界坐标时, 发现了 TiledLayer.getPositionAt() 这个方法, 用了之后发现输出的坐标位置怎么都对不上

文档里写的倒是简单 “获取指定 tile 的像素坐标”

本来是又自己写了个方法根据 地图size 和 Tiled size 手动计算, 结果倒是精确, 但想着既然官方提供了方法, 应该是不至于不能用吧

于是开始调试, 在我将整个 tiledmap 节点位置稍微移动了一下之后发现 这个输出坐标怎么不变呢? 想来可能输出的是这个 layer 的本地坐标, 按照这个思路去封装了一下代码, 果然是这样 . 代码如下, 写的不好还请见谅

    /**
     * 获取指定位置的 tile 的世界坐标
     * @param tiledLayer 
     * @param tiledPos 
     * @returns 
     */
    GetTileWorldPos(tiledLayer: TiledLayer, tiledPos: Vec2): Vec2 {

        //core 这个接口获取的位置是基于 layer 的本地坐标系下的坐标, 不能直接用的, 需要根据 layer 的位置换算成真正的世界坐标
        let pos = tiledLayer.getPositionAt(tiledPos);

        let layerWorldPosition = tiledLayer.node.worldPosition;
        // 由于锚点在左下角, 获取左下角的世界坐标 
        // halfW, halfH 是tiledmap 尺寸的一半
        // gridSize 是 tiled大小, 这里默认是正方形
        let leftDownPos = v2(
            layerWorldPosition.x - this.halfW * this.gridSize,
            layerWorldPosition.y - this.halfH * this.gridSize,
        )

        let ret = v2(pos.x + leftDownPos.x, pos.y + leftDownPos.y)

        // 这里返回的是 tile 左下角的坐标
        return ret;
    }

问题算是解决了, 但中途经历过调试查资料还是浪费了不少时间, 如果文档稍微写的详细一些那么可以省很多事情, 感觉cocos 的文档写的默认用户是要了解一大堆的东西才看得懂 , 希望官方在文档方面更用些心

2赞

多事之秋,官方现在可能没太多精力搞完善文档这种工作,又无法量化产出,很难出成绩的。引擎一堆bug都得往后排呢。还得是干点性价比高的活,比如说替换个更先进的框架啥的

1赞