gpt4 book ai didi

godot - 如何获取当前拥有焦点的控制节点?

转载 作者:行者123 更新时间:2023-12-05 03:35:29 34 4
gpt4 key购买 nike

我正在尝试确定哪个 Control节点刚刚改变了焦点。通过将节点上的焦点模式更改为 All,已设置另一个 Control 节点以使用焦点。在该节点的脚本中,我可以通过检查 has_focus 来判断它是否具有焦点。 .但是,我想从另一个脚本判断它是否改变了焦点。

我知道有 focused_entered and focus_exited signals我可以听,但这些组件在组件树上彼此相距很远,我不想通过一堆不相关的组件连接或冒泡信号。

Control documentation says :

Only one Control node can be in keyboard focus.

既然只有一个节点处于焦点,是否有一个全局函数可以确定单个节点当前具有焦点的是什么?我如何判断全局焦点何时发生变化?

最佳答案

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)

顺便说一句,如果您查看了get_focus_owner ( here ) 的源代码,代码中有Control 询问Viewport 它用于焦点所有者。您需要场景树中的 Control 才能使用 get_focus_owner

通过使用 "gui_focus_changed",您不必使用运行每一帧的 _process。因此,您的 CPU 使用率会降低。

关于godot - 如何获取当前拥有焦点的控制节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69856172/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com