保留标题文本
intermediate
在本教程中,你将学习如何保留绑定数据,并根据包含特定字符串的标题来更新元素。
概述
标题是向UI系统传递数据的常用方法。如果能让元素仅在标题包含特定字符串时更新数据,而忽略不包含该字符串的其他标题,这将非常有用。尽管本教程名为"保留标题文本",但此方法适用于任何通过绑定传递的数据(如副标题、玩家记分板名称等),而不仅限于标题。
为了保存特定字符串,我们结合使用visibility_changed绑定更新条件和source_control_name,仅在包含特定字符串时更新绑定,然后将该绑定传递给另一个元素。
标题命令
以下代码创建了一个标签元素,当添加到根面板时,会在标题包含字符串"update"时显示该标题(显示时会移除"update"文本)。之后传递的任何标题,只有包含"update"字符串时才会更新显示的文本。
RP/ui/hud_screen.json
json
"preserved_title_display": {
"$update_string": "update", // 标题必须包含此字符串才能更新元素
"type": "label",
"text": "#text",
"controls": [
{
"data_control": {
"type": "panel",
"size": [ 0, 0 ],
"bindings": [
{
"binding_name": "#hud_title_text_string" // 读取当前标题字符串
},
{
"binding_name": "#hud_title_text_string",
"binding_name_override": "#preserved_text", // 当元素可见性改变时更新#preserved_text
"binding_condition": "visibility_changed"
},
// 当传递包含更新字符串的标题时,元素会先变为可见然后立即变为不可见
{
"binding_type": "view",
"source_property_name": "(not (#hud_title_text_string = #preserved_text) and not ((#hud_title_text_string - $update_string) = #hud_title_text_string))",
"target_property_name": "#visible"
}
]
}
}
],
"bindings": [
{
"binding_type": "view",
"source_control_name": "data_control", // 从"data_control"子元素读取绑定
//"resolve_sibling_scope": true, // 如果"data_control"是获取绑定的元素的同级元素,则需要此项
"source_property_name": "(#preserved_text - $update_string)", // 从要显示的文本中移除更新字符串
"target_property_name": "#text"
}
]
},变量$update_string定义了标题命令中必须包含的特定字符串,该元素才会更新。子元素data_control用于在标题文本包含更新字符串时保留该文本。这必须是传递保留文本的元素的子元素或同级元素,因为data_control元素的可见性必须改变才能保存文本。元素中的第一个绑定会跟踪当前标题文本,第二个绑定会在元素可见性改变时将当前标题文本保存到#preserved_text绑定,第三个绑定会在传递包含更新字符串的标题时使元素可见然后立即变为不可见。
data_control元素中的第三个绑定有两个主要部分,两者都必须为真才能使元素可见:
not (#hud_title_text_string = #preserved_text)- 当当前标题文本与保留的标题文本不匹配时变为真not ((#hud_title_text_string - $update_string)- 当当前标题文本包含更新字符串时变为真
当传递包含更新字符串且与当前保留文本不同的标题时,两部分都变为真,元素会更新。然后保留文本被更新,第一部分立即变为假,使元素变为不可见。

