一、类自定义信号:
extends Node #1.定义信号 signal custom_signal(para1) func _ready(): #2.连接信号 self.connect("custom_signal", self, "_on_test_node_custom_signal", ["ab",1000]) func _input(event): if event is InputEventMouseButton: if event.button_index == BUTTON_LEFT and event.pressed: #3.发送信号 emit_signal("custom_signal","what") #信号回调函数 func _on_test_node_custom_signal(para1 , para2 , para3): print(para1 ," ", para2 , " " , para3)
信号传参:
自定信号可以在connect 中传递参数,也可以在emit_signal 中传递参数。因此定义回调函数的参数顺序是先是emit_signal,然后connect中的参数。
上面的代码中,para1 对应"what",para2对应"ab",para3对应1000
回调函数的参数一定要和发送的参数数量一致,才能成功接收到回调消息
当你定义了signal 之后,对应的也会被添加到编辑器里面,可以选择编辑器操作来连接信号
另外是关于回调函数命名的个人建议:
_on_发送信号的节点名_信号名()
这样做的好处是,方便别人和自己查看以及查询信号发送源
二、内置信号:
引擎的节点已经定义好的信号,连接信号的接收函数的两种方式
1.手动代码调用connect函数连接
2.在编辑器内编辑信号连接
手动连接的好处的可以传任何你想要的参数,而使用编辑器进行连接的话参数类型是有限制的
三、实例化对象添加信号
在对象已经实例化后,我们还想给它添加信号,使用add_user_signal 函数
extends Node var node_ins func _ready(): node_ins = load("res://node.gd").new() #1.定义信号 node_ins.add_user_signal("custom_user_signal") #2.连接信号 node_ins.connect("custom_user_signal",self,"_on_node_custom_user_signal") func _input(event): if event is InputEventMouseButton: if event.button_index == BUTTON_LEFT and event.pressed: #3发送信号 node_ins.emit_signal("custom_user_signal") #回调函数 func _on_node_custom_user_signal(): print("_on_node_custom_user_signal")
signal 创建的信号是和类绑定在一起,所以当实例化这个类,信号也会被创建;add_user_signal是实例绑定的一起,只属于当前绑定实例
四、信号相关的其他函数
void add_user_signal ( String signal, Array arguments=[ ] )
int connect ( String signal, Object target, String method, Array binds=[ ], int flags=0 )
void disconnect ( String signal, Object target, String method )
Variant emit_signal ( String signal ) vararg
Array get_signal_connection_list ( String signal ) const
Array get_signal_list ( ) const
bool has_user_signal ( String signal ) const
bool is_blocking_signals ( ) const
bool is_connected ( String signal, Object target, String method ) const
void set_block_signals ( bool enable )
暂无关于此日志的评论。