调用force_update后Tilemap图层被删除

问题描述 投票:0回答:1

我正在尝试为我的图块地图上建筑物接触的每个图块设置 set_custom_data 。当我在运行时更新函数中调用force_update(0)时,它会完全删除该层。我只是为了调试目的而调整图块,目标是使用 has_building 自定义数据创建图块字典

游戏管理器.gd

func create_warren(location : Vector2):
    var local_pos = tile_map.local_to_map(location)
    var tileset_source_id = 6
    var atlas_coords = Vector2i(0, 0)
    var buildings_layer = 5
    
  # add building to tilemap
    tile_map.set_cell(buildings_layer, local_pos, tileset_source_id, atlas_coords)
    
    var ground_layer = 0
    var tile_data : TileData = tile_map.get_cell_tile_data(ground_layer, local_pos)

    # set has_building for every tile the building touches
    var i = -5
    while i < 5:
        var l = local_pos
        l.x += i
        print(str(l))
        var next_tile_data : TileData = tile_map.get_cell_tile_data(ground_layer, l)
        if next_tile_data:
            tile_map.add_modulated_cell(l)
            # trigger TileMap._tile_data_runtime_update
            next_tile_data.set_custom_data(tile_has_building, true)
        i += 1

TileMap.gd

extends TileMap

var modulated_cells : Dictionary

func add_modulated_cell(v : Vector2i):
    modulated_cells[v] = Color.DARK_RED

func _ready():
    pass
    
func _use_tile_data_runtime_update(layer, coords):
    var r = modulated_cells.has(coords)
    return r
    

func _tile_data_runtime_update(layer, coords, tile_data):
    if layer == 1:
        var color = modulated_cells.get(coords)
        tile_data.modulate = color
        force_update(0) # removes my layer 0 while also modulating somehow
        print_debug(str(tile_data.get_custom_data("has_building"))) # returns false somehow

在我调用force_update之后,我的图层索引0被删除,完全显示下面的图块集图层。 ground layer (0) z-index: 0 not visible, but sand layer (1) z-index: -1 is visible 调用force_update()会删除每一层

godot godot4
1个回答
0
投票

这就是我简单的使用方法。您可能需要检查以查看或添加await 和dubg 并查看您得到的结果。 https://www.youtube.com/watch?v=7_fwNiZL0xY&t=59s

© www.soinside.com 2019 - 2024. All rights reserved.