当鼠标进入Area2D时,我希望鼠标光标变为手形光标。当我退出 Area2D 时,我希望它变回指针。我不打算使用自定义光标,只是已经在 GODOT 中实现的基本光标。
为此,您想要的功能是Input.set_default_cursor_shape 和Input.get_current_cursor_shape。
我知道如何使用 mouse_entered/mouse_exited 信号。我只是无法确定进行更改的正确代码和位置。
您将代码放置在您连接的任何信号处理程序中。我提醒您,您可以在“节点”面板的“信号”选项卡中连接来自 IDE 的信号。 在代码中,你应该看到 func 旁边的绿色图标连接到一个信号。另见Signals。
例如,我将它们连接到同一 Area2D 中的脚本,并添加了以下代码:
func _on_Area2D_mouse_entered() -> void:
Input.set_default_cursor_shape(Input.CURSOR_POINTING_HAND)
func _on_Area2D_mouse_exited() -> void:
Input.set_default_cursor_shape(Input.CURSOR_ARROW)
或者如果你想存储之前的CursorShape,你可以这样做:
var old_cursor_shape:int = Input.CURSOR_ARROW
func _on_Area2D_mouse_entered() -> void:
old_cursor_shape = Input.get_current_cursor_shape()
Input.set_default_cursor_shape(Input.CURSOR_POINTING_HAND)
func _on_Area2D_mouse_exited() -> void:
Input.set_default_cursor_shape(old_cursor_shape)
有关值,请参阅CursorShape。 注意:当前测试版中似乎存在一个错误,导致这些无法自动完成。
mouse_entered/mouse_exited 可能不起作用的原因。
假设它们连接正确。
如果有任何Control(例如Container 或背景)与Node2D 重叠 - 例如Area2D - 无论它在视觉上是在前面还是后面。它将阻止它接受输入。因此,您必须将其mouse_filter 的Control 设置为Ignore。
并确保Area2D 的collision_layer 和collision_mask 不为空(0),input_pickable 为真,当然Area2D 具有有效的CollisionShape2D 或CollisionPolygon2D。否则 mouse_entered/mouse_exited 将不起作用。
另外,我提醒您注意 IDE 报告的任何错误。