Godot 免费跨平台游戏引擎 (四、脚本GDScript)
既然想用Godot来做软件界面,那么现在这个黑漆漆的样式是不符合需求的。研究一下外观。
var t = Theme.new()
t.set_color("font_color", "Label", Color(1.0, 1.0, 1.0))
#设置一个默认的字体及大小
var font = DynamicFont.new()
font.font_data = preload("res://yahei.ttf")
font.size = 32
t.set_default_font(font)
var l = Label.new()
l.set_theme(t)
#当然你可以直接指定将外观指定给结点
$Label.set_theme(t)
#还有一些其它样式
t.set_color("font_color_hover","Button",Color(1.0, 1.0, 1.0))
这个示例创建了一个新主题。改变“字体颜色”选项,然后应用于标签。因此,该标签及所有子标签都将使用这个颜色。
var l = Label.new()
l.add_color_override("font_color", Color(1.0, 1.0, 1.0))
set(“custom_colors/font_color”, Color(1,0,0)) 这个是设置某个节点的字体颜色,而本章的方法,一来可以复用,再者可以在通过编辑来适配一类节点。
通过add_color_override与上相同。
我将代码举一反个三
func _ready():
# 添加了一个外观,外观中即定义了Label节点,也定义了Button节点的颜色
var t = Theme.new()
t.set_color("font_color", "Label", Color(0.5, 0.6, 1.0))
t.set_color("font_color_hover","Button",Color(0.1,0.6,0.6))
# 将外观指定给某个结点。若要批量指定,也可以通过子节点遍历
$Label2.set_theme(t)
$Button.set_theme(t)
# 定义了一个样式,并将Button节点的focus指定为此样式
var s = StyleBoxFlat.new()
s.set_bg_color(Color(1.0,0.5,0.1,1))
$Button.set("custom_styles/focus",s)
# 定义了一个动态字体,并将字体载入,指定此动态字体给Button节点
var f = DynamicFont.new()
f.font_data = load("res://res/yahei.ttf")
$Button.set("custom_fonts/font",f)
这样一来,我们可以基本不用通过IDE来指定设置,而通过代码可以更加灵活。例如将外观保存在一个文本配置文件中,进而可以很简单高效的修改界面样式。
自定义控件
如果只需要外观定制少数几个控件,通常没有必要创建一个新主题。控件提供其主题选项作为特殊类型的属性。
创建主题
创建主题的最简单方法是编辑主题资源。从资源菜单可以创建主题。
将主题保存下来,即可在其它项目中重复使用。
我们可以在代码中加载这个保存下来的主题文件
get_node(".").set_theme(Global.theme)
#get_node(".").set_theme(load("res://my.tres"))