game-development - Godot 信号是否充当事件处理程序?

标签 game-development godot

我是 Godot 游戏开发的初学者。我在理解 Godot 中的信号是什么时遇到了一些困难。我看过官方文档,但无法很好地理解。但是,我感觉这些信号是某种事件处理程序。

请帮助我理解 godot 中的信号是什么,以及我对信号作为事件处理程序的理解是否正确?

最佳答案

您是对的,信号 是您可以从节点 发出的事件。

emit_signal("signalName") #emit's signal with no data
emit_signal("signalName", whateverDataToSend) #emit's signal with data

然后您可以注册以在信号被触发时接收通知,因此连接到信号。

nodeWithSignalInIt.connect(String signalName,Object target,String methodToCall)

注意:connect 需要从内部有信号的节点调用

同样值得注意的是,我们在 Godot 中使用的所有节点都可以找到信号,例如,如果你想收到 Area2D 上的碰撞条目的通知,那么只需连接到 Area2D 的 area_entered 信号。

enter image description here

例子:

func _ready() -> void:
        #NOTE: InteractiveArea is of type Area2D
        $InteractiveArea.connect("mouse_entered", self, "_on_mouse_entered")
        $InteractiveArea.connect("mouse_exited", self, "_on_mouse_exited")
        $InteractiveArea.connect("area_entered", self, "_on_player_entered")
        $InteractiveArea.connect("area_exited", self, "_on_player_exited")

func _on_mouse_entered() -> void:
    mouse_entered = true

func _on_mouse_exited() -> void:
    mouse_entered = false

func _on_player_entered(area: Area2D) -> void:
    print ("Player entered chest opening zone.")
    interaction_zone = true;

func _on_player_exited(area: Area2D) -> void:
    print ("Player exited chest opening zone.")
    interaction_zone = false

关于game-development - Godot 信号是否充当事件处理程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56376307/

相关文章:

algorithm - 像随机关卡生成一样自由流动,只有一种可能的解决方案?

java - 有没有办法在应用程序启动时以编程方式设置特定的终端字体?

python - 为什么将一个变量设置为等于另一个变量会改变此代码中的任何内容?

godot - 如何手动重新启动一次性计时器?

java - 如何有效地找到一个圆圈、一个网格中的所有 block ?

javascript - 如何使按钮多次更改段落并在最后一次更改段落和按钮文本?

javascript - Sprite 动画卡在第一帧?

Godot3改变meshInstance的颜色

html - 在 Godot 中关闭游戏

3d - Godot - 来自 GLB 导入的循环动画