我正在尝试为我的图块地图上建筑物接触的每个图块设置 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被删除,完全显示下面的图块集图层。 调用force_update()会删除每一层
这就是我简单的使用方法。您可能需要检查以查看或添加await 和dubg 并查看您得到的结果。 https://www.youtube.com/watch?v=7_fwNiZL0xY&t=59s