Godot-StartUP

创建于:2018-07-28

创建人: Justus

44 信息 154 成员
讨论基于Godot以及Unity引擎的游戏开发经验,理论和最佳实践。共享一些通用思路以启发另一种生产工具中的实践。独立开发群QQ: 122017359

godot 3.x 信号

JamBob 2018-10-22

一、类自定义信号

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 之后,对应的也会被添加到编辑器里面,可以选择编辑器操作来连接信号

    Image title

另外是关于回调函数命名的个人建议:

    _on_发送信号的节点名_信号名()

    这样做的好处是,方便别人和自己查看以及查询信号发送源

二、内置信号

    引擎的节点已经定义好的信号,连接信号的接收函数的两种方式

        1.手动代码调用connect函数连接

        2.在编辑器内编辑信号连接

    手动连接的好处的可以传任何你想要的参数,而使用编辑器进行连接的话参数类型是有限制的

Image title

三、实例化对象添加信号

    在对象已经实例化后,我们还想给它添加信号,使用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 )

(转发自:原日志地址

近期喜欢的会员

 

加入 indienova

  • 建立个人/工作室档案
  • 建立开发中的游戏档案
  • 关注个人/工作室动态
  • 寻找合作伙伴共同开发
  • 寻求线上发行
  • 更多服务……
登录/注册