编写健壮的代码

健壮的代码能增加代码的兼容性,并且尽可能减少对 JSON UI 的破坏。本文将为您提供一些方法,帮助您编写健壮可靠的 JSON UI 代码。

优化性能

控件较多极有可能影响性能,甚至加载游戏时还需要等待一段时间。我们需要通过下方的方法减少对性能的开销:

正确隐藏控件

不要总是以为"visible": false就可以隐藏控件,这个属性只是让这个控件处于不可见状态,绑定之类的属性仍然能读取到这个控件。如果要正确隐藏这个控件,我们可以使用"ignored": true忽略这个控件。控件忽略后不会被绑定之类的属性读取。

减少绑定的使用

减少绑定的使用有利于进一步优化性能,许多屏幕通常都需要使用绑定增加互动性,因此减少绑定的读取可减少性能开销。

减少操作运算

操作运算可以处理某一些数据,如果有多余的操作运算也有可能会影响到性能,因此减少操作运算也是一种不错的选择。

减少穷举

穷举的确可以让我们列举出在数据不同的情况显示不同的控件样式,我们需要合理的使用穷举。

减少多余部分

文件大小较大的资源包通常会因为拥有多余的代码,多余的代码使得文件拥挤,开发者难以维护代码。可以根据下方的方法优化该部分问题:

减少不必要修改的代码

但我想去除一些不必要的阴影,可以这样做:

"progress_text_label": { "type": "label", "shadow": false, "text": "#level_number", "color": "$experience_text_color", "anchor_from": "top_middle", "anchor_to": "bottom_middle", "bindings": [ { "binding_name": "#level_number", "binding_type": "global" }, { "binding_name": "#level_number_visible", "binding_type": "global", "binding_name_override": "#visible" } ] }

代码中包含了无需修改的部分,这些部分可能会受版本更新而影响。这时,我们需要尽可能的减少不必要修改的代码:

"progress_text_label": { "shadow": true }

如果有些控件包含引用,在不需要修改引用时,你可以考虑把这个控件的引用删除。

由于这些代码可以与原版的 JSON UI 合并,因此不用担心这些属性会失效。

这种方法不仅可以减少对UI的破坏,而且还能减少文件的大小,让杂乱无章的文件变得干净整洁。

去除多余的控件

与上方同理,我们也可以去除多余的控件。这样能防止版本更新导致的各种错误,就例如设置屏幕左边的选项卡。

合理添加控件

有时候,我们通常都需要添加控件在屏幕上。那么你是否会合理添加控件呢?

"start_screen_content": { "modifications": [ { "array_name": "controls", "operation": "insert_back", "value": [ {"test1@test":{}}, {"test2@test":{}}, {"test3@test":{}} ] } ] }

即使添加多个控件在屏幕内容中都不会发生控件名冲突,但我们要充分的避免一些小错误。如果某个 JSON UI 资源包优先占用了这个控件名,这样就可能会发生控件名冲突。

你可以像下面那样解决,尽可能的减少冲突:

"start_screen_content": { "modifications": [ { "array_name": "controls", "operation": "insert_back", "value": [ {"test_panel@test_panel":{}} ] } ] }, "test_panel": { "controls": [ {"test1@test":{}}, {"test2@test":{}}, {"test3@test":{}} ] }

修改嵌套中的子控件

有些控件的 controls 数组对象特别多,我们需要修改某一处的子控件。你可以考虑使用修改属性

有时我们也需要像下方这样修改子控件的属性:

"test_panel": { "controls": [ { "label": { "type": "label", "text": "hello" } } ] }

如果我们只想修改其中的文字,你可以这样写:

"test_panel/label": { "text": "hello" }

可以在示例中看到,在控件名中使用“/”来区分子控件路径,这样可以绕过一些不必要修改的嵌套子控件。不过,要注意的是。当父控件(test_panel)删除后或者任意一处的子控件不存在时,资源包会报错。

避免错误

在开发过程中,我们也要避免一些错误。例如 controls 属性中使用相同名称的子控件或者变量未声明…