【问题标题】:How do I center a Label inside a Node in Godot?如何在 Godot 的节点内将标签居中?
【发布时间】:2018-09-11 09:12:37
【问题描述】:

我正在尝试在 Godot 中的自定义绘图节点内将标签居中。标签附加到节点。父节点是一个六边形,其(0,0)位置在六边形的中心(即节点中有负坐标)。当我添加标签时,它似乎将六边形的中心作为其左上角。

但是,我希望标签的中心位于六边形的中心。这意味着,标签的某些部分必须有负坐标,但我找不到任何解决方案以正确的方式使标签居中。标签在 Godot 上没有大小,因此我无法手动将其居中。

标签代码:

var label = new Label();
tile.AddChild(label);
label.SetText("1");
label.SetScale(new Vector2(1.5f,1.5f));
label.SetAlign(Godot.Label.AlignEnum.Center);

【问题讨论】:

    标签: c# godot


    【解决方案1】:

    我终于找到了答案。如果 HexTile.Radio 是六边形的半径,则使标签居中包括更改边距和矩形位置:

    var label = new Label();
    tile.AddChild(label);
    label.SetText("1");
    
    label.SetAlign(Godot.Label.AlignEnum.Center);
    label.SetValign(Godot.Label.VAlign.Center);
    label.SetMargin(Margin.Left,-HexTile.Radio);
    label.SetMargin(Margin.Top,-HexTile.Radio);
    label.SetMargin(Margin.Right,HexTile.Radio);
    label.SetMargin(Margin.Bottom,HexTile.Radio);
    label.RectPosition = new Vector2(-HexTile.Radio,-HexTile.Radio);
    

    【讨论】:

      【解决方案2】:

      设置align和valign为center后,还可以设置rect_positionrect_size的一半(都是所有Control节点的成员,比如一个Label)。在 GDScript 中,它看起来像这样:

      func _ready():
          var rect = $Label.rect_size
          var pos = -rect/2
          $Label.rect_position = pos
      

      确保标签节点的锚点设置为 0(或在布局按钮中选择“左上角”)。标签内居中文本的位置受锚点、边距、位置和大小的影响。

      您可以在这里阅读更多信息:Size and anchors

      【讨论】:

        猜你喜欢
        • 2019-02-14
        • 1970-01-01
        • 1970-01-01
        • 2019-03-14
        • 1970-01-01
        • 2020-11-26
        • 2019-06-09
        • 2021-08-22
        • 1970-01-01
        相关资源
        最近更新 更多