基础用法示例
本示例展示 GDSignalBus 的基础功能,包括信号发射、订阅和频道管理。
完整示例代码
gdscript
@warning_ignore_start("static_called_on_instance")
extends Node2D
@onready var bus = SignalBus.get_singleton()
func _ready() -> void:
bus.set_debug_enabled(true)
print(bus.get_channel_list())
bus.subscribe("my_signal", on_signal_activate)
bus.subscribe("my_signal", on_signal_with_arg)
# 创建频道信号
bus.subscribe_on_channel("channel1", "signal1_on_channel", on_channel1_signal)
bus.subscribe_on_channel("channel2", "signal1_on_channel", on_channel2_signal)
func _process(_delta: float) -> void:
if Input.is_action_just_pressed("ui_accept"):
bus.emit("my_signal", [])
if Input.is_action_just_pressed("ui_up"):
bus.emit_on_channel("channel1", "signal1_on_channel", [])
if Input.is_action_just_pressed("ui_down"):
bus.emit_on_channel("channel2", "signal1_on_channel", [])
if Input.is_action_just_pressed("ui_left"):
bus.emit("my_signal", ["Hello SignalBus"])
if Input.is_action_just_pressed("ui_right"):
bus.emit_on_channel("default", "my_signal", ["Hello SignalBus"])
func on_signal_activate():
print("my_signal 信号触发")
print("信号列表:")
print(bus.get_signal_list())
print("频道列表:")
print(bus.get_channel_list())
print("订阅signal1_on_channel信号的订阅者数量:")
print(bus.get_subscriber_count("signal1_on_channel"))
func on_channel1_signal():
print("channel1 信号触发")
func on_channel2_signal():
print("channel2 信号触发")
func on_signal_with_arg(message):
print("my_signal 接收到参数")
print(message)功能说明
1. 基础信号订阅和发射
gdscript
# 订阅信号
bus.subscribe("my_signal", on_signal_activate)
bus.subscribe("my_signal", on_signal_with_arg)
# 发射信号
bus.emit("my_signal", []) # 无参数
bus.emit("my_signal", ["Hello SignalBus"]) # 带参数2. 频道管理
gdscript
# 在不同频道订阅相同信号名
bus.subscribe_on_channel("channel1", "signal1_on_channel", on_channel1_signal)
bus.subscribe_on_channel("channel2", "signal1_on_channel", on_channel2_signal)
# 在指定频道发射信号
bus.emit_on_channel("channel1", "signal1_on_channel", [])
bus.emit_on_channel("channel2", "signal1_on_channel", [])
bus.emit_on_channel("default", "my_signal", ["Hello SignalBus"])3. 调试和信息查询
gdscript
# 启用调试模式
bus.set_debug_enabled(true)
# 获取系统信息
print(bus.get_channel_list()) # 获取频道列表
print(bus.get_signal_list()) # 获取信号列表
print(bus.get_subscriber_count("signal1_on_channel")) # 获取订阅者数量控制说明
运行示例后,可以使用以下按键测试不同功能:
- UI Accept (通常为 Enter 或空格): 发射无参数的
my_signal信号 - UI Up (方向键上): 在
channel1频道发射signal1_on_channel信号 - UI Down (方向键下): 在
channel2频道发射signal1_on_channel信号 - UI Left (方向键左): 发射带参数的
my_signal信号 - UI Right (方向键右): 在默认频道发射带参数的
my_signal信号
输出示例
当按下不同按键时,控制台会显示相应的输出:
my_signal 信号触发
信号列表:
[my_signal, signal1_on_channel]
频道列表:
[default, channel1, channel2]
订阅signal1_on_channel信号的订阅者数量:
2
channel1 信号触发
channel2 信号触发
my_signal 接收到参数
Hello SignalBus核心概念
信号订阅
subscribe(signal_name, callback): 在默认频道订阅信号subscribe_on_channel(channel, signal_name, callback): 在指定频道订阅信号
信号发射
emit(signal_name, args): 在默认频道发射信号emit_on_channel(channel, signal_name, args): 在指定频道发射信号
频道隔离
相同信号名在不同频道中是独立的,这允许你在不同模块中使用相同的信号名而不产生冲突。
这个基础示例展示了 GDSignalBus 的核心功能,为更复杂的应用场景奠定了基础。