Godot:标签为 "actively" 当(不)为空时触发信号
Godot: Label to "actively" fire Signal when (not) empty
当标签中没有文本(最后一个剩余字符刚刚被擦除并且标签为空)并且第一个字符被写入空标签时,我如何让我的标签触发信号(所以它不再是空的了)?
当我“主动”寻找实际状态时,if text.empty():
和 if not text.empty():
都可以工作,比如说,通过按下连接的按钮,但我不知道如何制作标签当改变到所述状态时,它自己会“主动”发出这样的信号。这怎么可能?
好吧,kleonc 通过 reddit 告诉我这个(感谢一百万!):
您可以在标签脚本中创建自己的信号。您可以覆盖 _set 方法,您可以在其中检查文本 属性 是否正在更改并根据新值执行某些操作。这样的事情应该有效:
extends Label
signal textChanged(newText)
func _set(property, value):
match property:
"text":
if text != value:
text = value
emit_signal("textChanged", value)
return true
return false
然后您可以将一些方法连接到该信号:
# ...
yourLabel.connect("textChanged", self, "onLabelTextChanged")
# ...
func onLabelTextChanged(newText):
yourEraseButton.disabled = newText.empty()
当标签中没有文本(最后一个剩余字符刚刚被擦除并且标签为空)并且第一个字符被写入空标签时,我如何让我的标签触发信号(所以它不再是空的了)?
当我“主动”寻找实际状态时,if text.empty():
和 if not text.empty():
都可以工作,比如说,通过按下连接的按钮,但我不知道如何制作标签当改变到所述状态时,它自己会“主动”发出这样的信号。这怎么可能?
好吧,kleonc 通过 reddit 告诉我这个(感谢一百万!):
您可以在标签脚本中创建自己的信号。您可以覆盖 _set 方法,您可以在其中检查文本 属性 是否正在更改并根据新值执行某些操作。这样的事情应该有效:
extends Label
signal textChanged(newText)
func _set(property, value):
match property:
"text":
if text != value:
text = value
emit_signal("textChanged", value)
return true
return false
然后您可以将一些方法连接到该信号:
# ...
yourLabel.connect("textChanged", self, "onLabelTextChanged")
# ...
func onLabelTextChanged(newText):
yourEraseButton.disabled = newText.empty()