Godot 4.1中如何识别触发gui_input事件的动态TextureRect节点
动态创建TextureRect时识别点击节点的方法
在Godot 4.1里,你可以用以下几种简洁的方式确定哪个动态创建的TextureRect被点击:
方法1:绑定信号时传递节点引用
创建TextureRect时,用bind()把节点本身作为额外参数传递给处理函数:
var tr = TextureRect.new() # 这里可以设置tr的纹理、位置等属性 tr.gui_input.connect(_on_texture_rect_gui_input.bind(tr))
对应的处理函数修改为接收事件和节点参数:
func _on_texture_rect_gui_input(event: InputEvent, sender: TextureRect): if event is InputEventMouseButton: if event.button_index == MOUSE_BUTTON_LEFT and event.pressed: print("点击的节点是:", sender.name) # 也可以直接操作sender节点,比如修改纹理、隐藏等
方法2:通过信号发射器获取节点
Godot的信号处理函数里可以用get_signal_emitter()方法直接获取发送信号的节点,不需要额外传递参数:
func _on_texture_rect_gui_input(event: InputEvent): if event is InputEventMouseButton: if event.button_index == MOUSE_BUTTON_LEFT and event.pressed: var sender = get_signal_emitter() if sender is TextureRect: print("点击的节点是:", sender.name)
方法3:给节点设置唯一标识
动态创建时给每个TextureRect设置唯一的name或者自定义属性,比如:
var tr = TextureRect.new() tr.name = "texture_rect_" + str(unique_id) # unique_id可以是递增的数字或者唯一标识符 # 或者设置自定义属性 tr.set_meta("image_id", image_id) tr.gui_input.connect(_on_texture_rect_gui_input)
然后在处理函数里通过发射器获取节点后读取标识:
func _on_texture_rect_gui_input(event: InputEvent): if event is InputEventMouseButton: if event.button_index == MOUSE_BUTTON_LEFT and event.pressed: var sender = get_signal_emitter() print("点击的节点名称:", sender.name) print("自定义ID:", sender.get_meta("image_id"))
内容的提问来源于stack exchange,提问作者Gabor Lengyel
相关产品推荐
相关产品推荐

