信号 (signal)

4.6 2026-01-27

当按下一个按钮时,我们期望执行对应的函数,比如“点击按钮,开始游戏”,点击(pressed)信号可以关联(connect)到一个函数上。


hud.get_node("Button").pressed.connect(new_game)

func new_game():
    print("new game")

运行游戏,按下按钮后可以看到控制台上打印"new game"。

在传统设计模式中,GDScript的信号(signal)对应着观察者模式(Observable)。

  • 首先为一个组件定义一套标准事件,在特定场景下会触发相应事件
  • 然后可以为组件增加事件监听器,在触发事件时,会提醒监听器进行处理

如果我们想创建一个自定义的事件,可以使用signal关键字定义,再使用emit()触发事件。


# 定义一个事件
signal sun_rised

func _ready():
    # 事件与函数关联
    sun_rised.connect(_on_sun_rised)

func some_func():
    # 触发事件
    sun_rised.emit(old_value, new_value)