【问题标题】:Merge Two of the same TileMap合并两个相同的 TileMap
【发布时间】:2021-09-08 18:22:34
【问题描述】:

我正在制作一个系统来生成带有预制房间的场景,即使 TileMap 节点包含完全相同的集合,它们也不与其他节点交互,从而给它们带来这种奇怪的分段感觉。我试图编写代码将它们融合到一个节点中,但似乎我可能对如何使用单元格的局部/全局坐标感到困惑。

分段房间图片:

我的想法是使用get_used_cells_by_id 方法的ID 向房间场景询问单元格,然后使用set_cell 将它们添加到主场景中的TileMap。任何帮助表示赞赏

func updateDungeonTileMap():
    var maintileMap = $TileMap
    var tileMapID:Array = [0, 1, 2]
    var roomCheck:Array = $Rooms.get_children()
    for i in tileMapID.size():
        for o in roomCheck.size():
            var roomTileMap = roomCheck[o].getTileMap()
            var cells:Array = roomCheck[o].getTileMapCells(i)
            for u in cells.size():
                var globalCord:Vector2 = roomTileMap.to_global(cells[u])
                var localCord:Vector2 = maintileMap.to_local(globalCord)
                maintileMap.set_cell(localCord[0], localCord[1], i)
    for i in roomCheck.size():
        roomCheck[i].removeTileMap()
    maintileMap.update_bitmask_region()

func getTileMapCells(id):
    return $TileMap.get_used_cells_by_id(id)

【问题讨论】:

    标签: godot gdscript


    【解决方案1】:

    在测试和检查了几个小时的数字后,我发现问题在于我没有将全局坐标乘以我的图块大小:

    var globalCord:Vector2 = roomTileMap.to_global(cells[u]*16)
    

    func updateDungeonTileMap():
        var maintileMap = $TileMap
        var tileMapID:Array = [0, 1, 2]
        var roomCheck:Array = $Rooms.get_children()
        for i in tileMapID.size():
            for o in roomCheck.size():
                var roomTileMap = roomCheck[o].getTileMap()
                var cells:Array = roomCheck[o].getTileMapCells(i)
                for u in cells.size():
                    var globalCord:Vector2 = roomTileMap.to_global(cells[u]*16)
                    var localCord:Vector2 = maintileMap.world_to_map(globalCord)
                    maintileMap.set_cell(localCord[0], localCord[1], i)
        for i in roomCheck.size():
            roomCheck[i].removeTileMap()
        maintileMap.update_bitmask_region()
    

    【讨论】:

    • 我明白了。好吧,函数map_to_world 会做这个乘法。再说一次,world_to_map 采用局部坐标,而不是全局坐标。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-12
    • 2015-11-26
    • 2013-02-17
    • 2015-01-21
    • 2020-09-16
    • 1970-01-01
    相关资源
    最近更新 更多