Godot:如何垂直对齐bbcode

Posted

技术标签:

【中文标题】Godot:如何垂直对齐bbcode【英文标题】:Godot: How to vertically align bbcode 【发布时间】:2022-01-21 09:10:39 【问题描述】:

有没有办法像这样使用 bbcode 垂直对齐文本?

[img=16]res://icon.png[/img] Hello World

【问题讨论】:

【参考方案1】:

遗憾的是,Godot 没有任何 BBCode tags 用于垂直对齐。因此,没有直接的方法可以垂直居中。但是我们可以做一些事情……


默认:底部文字

如您所见,默认情况下,您会在图像底部获得文本:

[img=16]res://icon.png[/img]Hello World

表格:顶部的文字

如果我们使用表格,我们可以获取顶部的文本,如下所示:

[table=2][cell][img=16]res://icon.png[/img][/cell][cell]Hello World[/cell][/table]

然后您可以使用新行将其向下移动(或者您可以将其与下面的自定义标签结合使用)。我认为这是更通用的解决方案。


垂直移动图像的技巧

文档建议了这个技巧:我们可以创建一个空的BitmapFont 资源,并给它一些积极的ascent。然后用该字体显示图像。

在我的例子中,我创建了一个名为 v.tres 的字体,所以我的 BBCode 如下:

[font=v.tres][img=16]res://icon.png[/img][/font]Hello World

正如我们在ascent 中所说,结果是将图像向上移动了那么多像素。 据推测,您可以计算出将图像向上移动多少才能获得所需的对齐方式(是的,这意味着 ascent 的不同值的 BitmapFont 资源不同)。


垂直移动文本的自定义标签

Godot 允许定义自定义的 BBCode 标签,所以让我们用它来垂直移动文本。

我将展示如何完成这项工作:

[img=16]icon.png[/img][valign px=8]Hello World[/valign]

首先使用此代码创建一个valign.gd 脚本:

tool class_name RichTextVAlign extends RichTextEffect

var bbcode := "valign"

func _process_custom_fx(char_fx:CharFXTransform) -> bool:
    char_fx.offset = Vector2.UP * char_fx.env.get("px", 0.0)
    return true

看到我们正在读取px 属性,默认值为0.0char_fx.env.get("px", 0.0),我们使用该值通过设置char_fx.offset 来替换文本。

然后在RichTextLabel 中将新的RichTextVAlign(这是我们创建的类)添加到custom_effects 属性中。

请记住,我们正在移动文本的基线(如果您在前面描述的表格方法中执行此操作,您可以将其视为移动文本的顶部。是的,使用负数来移动它下)。我们无法获取文本块的高度。

【讨论】:

【参考方案2】:

在图像和文本之间添加带有 /n 的回车。

【讨论】:

以上是关于Godot:如何垂直对齐bbcode的主要内容,如果未能解决你的问题,请参考以下文章

如何垂直对齐段落中心

如何垂直对齐2种不同大小的文本?

如何垂直或水平对齐定向文本?

如何在引导程序中使用垂直对齐

如何垂直居中对齐位置:相对元素?

如何垂直对齐角度材料标签?