(原) Godot Tilemap 路径自动规范(待补充完整)

原创文章,请后转载,并注明出处。

在使用TileMap时,通常需要使用 CollisionPolygon2D 来规范玩家的可活动范围,这是比较麻烦的。这里试图用两种方法来自动规范,减少无效工作。特别是你有多个场景时。

  1. 根据玩家位置自动判断地图块

  2. 添加掩码图层自动判断可行区域

  3. 其它相关代码

这是方法1获取相关信息的相关代码

	# 获取 CharacterBody2D 的全局坐标
	var character_position = player.global_position
	
	# 将全局坐标转换为 TileMap 的局部坐标
	var tilemap_position = tilemap.to_local(character_position)
	
	# 将局部坐标转换为地图块坐标
	var tile_coords = tilemap.local_to_map(tilemap_position)
	
	# 打印调试信息
	print("角色全局坐标: ", character_position)
	print("TileMap 局部坐标: ", tilemap_position)
	print("地图块坐标: ", tile_coords)
	
	# 检查 TileMap 的 tile_set 是否设置
	if tilemap.tile_set == null:
		#print("TileMap 的 tile_set 未设置!")
	else:
		#print("TileMap 的 tile_set 已设置。")
		#print("图块大小: ", tilemap.tile_set.tile_size)
	
	# 检查图层是否启用
	for layer in range(tilemap.get_layers_count()):
		print("图层 ", layer, " 是否可见: ", tilemap.is_layer_enabled(layer))
	
	# 获取 TileMap 的边界
	var map_rect = tilemap.get_used_rect()
	
	# 检查坐标是否在地图范围内
	if map_rect.has_point(tile_coords):
		# 遍历所有图层,检查地图块信息
		for layer in range(tilemap.get_layers_count()):
			var tile_source_id = tilemap.get_cell_source_id(layer, tile_coords)
			var tile_atlas_coords = tilemap.get_cell_atlas_coords(layer, tile_coords)
			var layer_name = tilemap.get_layer_name(layer)
			if tile_source_id != -1:
				print("图层 ", layer, " ", layer_name, " 的地图块 Source ID: ", tile_source_id, " 地图块图集坐标: ",tile_atlas_coords)
	else:
		print("角色坐标超出地图范围!")

相关文章