YueZHeng_917 2024-12-07 13:38 采纳率: 57.9%
浏览 30

godot的tilemap生成六边形地图总是有偏移怎么办


extends TileMap

# 图块索引,确保这些索引与 TileMap 中的图块对应
var tile_indices = 3  # 假设有四种图块,分别是 0, 1, 2, 3
#地图生成的中心地块
var cell_x = 0
var cell_y = 0
# 地图的半径
var map_radius = 1  # 可以根据需要更改

var x = cell_x
var y = cell_y
var x1 = x
var y1 = y
var rbanjin = map_radius

func _ready():
    generate_hexagonal_map()

func generate_hexagonal_map():
    # 根据 rbanjin 的值动态设置 q 和 r 的范围
    var range_limit = rbanjin
    for q in range(-range_limit, range_limit + 1):
        for r in range(-range_limit, range_limit + 1):
            set_cell(0, Vector2i(q+cell_x, r+cell_y), 1, Vector2i(0, 0), tile_indices)
    pass

#func _set_cell():
    #set_cell(0, Vector2i(x,y), 1, Vector2i(0,0), tile_indices)

func _input(event):
    if event is InputEventMouseButton and event.pressed and event.button_index == 1:
        var mouse_position = get_global_mouse_position()
        var cell_position = local_to_map(mouse_position)
        var tile_id = get_cell_source_id(0,cell_position)

        if tile_id != -1:  # 确保点击的地方有 tile
            print("Tile position: ", cell_position)
        elif tile_id == -1:
            print("无地块")

img

  • 写回答

1条回答 默认 最新

  • 趣享先生 优质创作者: 编程框架技术领域 2024-12-07 14:43
    关注

    该回答参考ChatGPT,由吾为汝整理提供如若有用,还请题主采纳!

    在 Godot 中生成六边形地图时,偏移问题通常与坐标系统和六边形的排列方式有关。六边形的坐标系统通常使用 "q" 和 "r" 坐标,而不是传统的 "x" 和 "y" 坐标。以下是一些可能的解决方案和改进建议,以帮助你解决偏移问题:

    1. 使用正确的六边形坐标转换

    六边形的每个单元格都有特定的坐标计算方式。你需要确保在设置单元格时使用正确的偏移量。对于六边形,通常使用以下公式来计算位置:

    • $x = \text{cell_size} \times (q + \frac{r}{2})$
    • $y = \text{cell_size} \times \frac{\sqrt{3}}{2} \times r$

    这里的 cell_size 是六边形的大小(即边长)。

    2. 修改 generate_hexagonal_map 函数

    你可以根据六边形的坐标系统来修改 generate_hexagonal_map 函数。以下是一个示例:

    func generate_hexagonal_map():
        var range_limit = rbanjin
        for q in range(-range_limit, range_limit + 1):
            for r in range(-range_limit, range_limit + 1):
                if abs(q + r) <= range_limit:  # 确保在六边形范围内
                    var position = Vector2(q + cell_x, r + cell_y)
                    var tile_position = Vector2(position.x + (position.y / 2), position.y * sqrt(3) / 2)
                    set_cell(0, tile_position, 1, Vector2(0, 0), tile_indices)
    

    3. 确保 TileMap 的设置正确

    确保你的 TileMap 的设置正确,包括:

    • Cell Size: 确保 TileMap 的单元格大小与六边形的实际大小相匹配。
    • Tile Origin: 确保图块的原点设置为中心或适当的位置,以便在绘制时不会出现偏移。

    4. 调整 TileMap 的偏移

    如果仍然存在偏移问题,可以尝试调整 TileMap 的偏移设置。你可以在 TileMap 的属性中找到 Offset 选项,手动调整以确保六边形对齐。

    5. 调试输出

    在生成地图时,可以添加调试输出,以便查看每个六边形的计算位置,帮助你找到偏移的原因:

    print("Placing tile at: ", tile_position)
    

    通过这些步骤,你应该能够解决六边形地图生成中的偏移问题。如果还有其他问题,请继续提问,我们可以一步步来解决。

    评论

报告相同问题?

问题事件

  • 创建了问题 12月7日