美文网首页
tiledMap使用(二)

tiledMap使用(二)

作者: 园Flora | 来源:发表于2021-03-09 11:14 被阅读0次

    基本用法上一篇讲了,具体在cocos里使用的时候发现了一些问题(可能是版本缘故,cocos引擎用的3.8)
    策划需求是要个正六边形的地块,于是在编辑器里画了正六边形的,


    image.png

    图块边长正好是长(或宽)的一半。(顺便说下正六边形的基本特性:六个边等长,每个角都是120度)

    大坑警告:一开始设置了栅格类型Y。在编辑器里如图展示
    image.png

    然而,在游戏里
    是错位排布的,找了很久终于找到了源码。
    在ccxmllayer.cpp里

    TMXLayer::setupTileSprite  设置每个tile的
    getPositionAt  获取位置
    Vec2 TMXLayer::getPositionAt(const Vec2& pos)
    {
        Vec2 ret;
        switch (_layerOrientation)
        {
        case TMXOrientationOrtho:
            ret = getPositionForOrthoAt(pos);
            break;
        case TMXOrientationIso:
            ret = getPositionForIsoAt(pos);
            break;
        case TMXOrientationHex: //获取六边形的位置
            ret = getPositionForHexAt(pos);
            break;
        case TMXOrientationStaggered:
            ret = getPositionForStaggeredAt(pos);
            break;
        }
        ret = CC_POINT_PIXELS_TO_POINTS( ret );
        return ret;
    }
    ...
    Vec2 TMXLayer::getPositionForHexAt(const Vec2& pos)
    {
        float diffY = 0;
        if ((int)pos.x % 2 == 1)
        {
            diffY = -_mapTileSize.height/2 ;//y根据奇偶错位了
        }
    
        Vec2 xy(
            pos.x * _mapTileSize.width*3/4,//这里x坐标都取了3/4位置,并没有先判断栅格类型
                                (_layerSize.height - pos.y - 1) * _mapTileSize.height + diffY);//y根据奇偶错位了
        return xy;
    }
    
    

    一度以为只能自己实现的时候,灵感一闪,这不就是栅格类型为x的实现方式吗?于是乎,我说服策划这样搞了,显示完全正常


    image.png

    【记忆不好,只能啰嗦一下】
    1、每个格子锚点在左下角
    2、编辑器里如果层点击了不可见,那么代码里加载的时候就找不到这个层了

    相关文章

      网友评论

          本文标题:tiledMap使用(二)

          本文链接:https://www.haomeiwen.com/subject/tpvvqltx.html