Как центрировать метку внутри узла в Godot?

Я пытаюсь центрировать метку внутри пользовательского узла рисования в Godot. Этикетка прикреплена к узлу. Родительский узел - это шестиугольник, положение которого (0,0) находится в центре шестиугольника (это означает, что в узле есть отрицательные координаты). Когда я добавляю метку, кажется, что центр шестиугольника находится в верхнем левом углу.

Imgur

Однако я бы хотел, чтобы центр этикетки находился в центре шестиугольника. Это означает, что некоторые части этикетки должны иметь отрицательные координаты, но я не могу найти никакого решения, чтобы правильно центрировать этикетку. Этикетки не имеют размера на 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);

person Adrián Arroyo Calle    schedule 20.03.2018    source источник


Ответы (2)


Я наконец нашел ответ. Если 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);
person Adrián Arroyo Calle    schedule 21.03.2018

После установки align и valign по центру вы также можете установить rect_position равным половине rect_size (оба являются членами всех узлов Control, таких как Label). В GDScript это будет выглядеть так:

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

Убедитесь, что привязки узла Label установлены на 0 (или выберите «Вверху слева» в кнопке «Макет»). Положение центрированного текста внутри метки зависит от привязки, полей, положения и размера.

Подробнее об этом можно прочитать здесь: Размер и привязки

person Gustavo Kaneto    schedule 11.09.2018