我试图确定哪个控制节点刚刚改变了焦点。通过将节点上的焦点模式更改为 ,已设置另一个控制节点以使用焦点All。从该节点的脚本中,我可以通过检查来判断它是否具有焦点has_focus。但是,我想从另一个脚本中判断它是否改变了焦点。
我知道有focused_entered一些focus_exited信号可以监听,但是这些组件在组件树上彼此相距很远,我不想通过一堆不相关的组件连接或冒泡信号。
控制文档说:
只有一个
Control节点可以成为键盘焦点。
由于只有一个节点处于焦点,是否有一个全局函数可以确定单个节点当前具有焦点的内容?我如何知道全球焦点何时发生变化?
您可以使用此Viewport信号。"gui_focus_changed"每次更改时,它都会为您提供具有焦点的控件。
您可以通过如下代码连接到它:
func ready() -> void:
get_viewport().connect("gui_focus_changed", self, "_on_focus_changed")
func _on_focus_changed(control:Control) -> void:
if control != null:
print(control.name)
Run Code Online (Sandbox Code Playgroud)
顺便说一句,如果您查看get_focus_owner(此处)的源代码,该代码会Control询问Viewport焦点所有者。Control您需要在场景树中使用它get_focus_owner。
通过使用"gui_focus_changed",您不必使用_process每帧都运行的命令。因此,您的 CPU 使用率将会减少。
Godot 4 的附录: Control不再公开get_focus_owner,而是使用get_viewport().gui_get_focus_owner().
| 归档时间: |
|
| 查看次数: |
7235 次 |
| 最近记录: |