You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 21:08:10