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

Godot:如何通过脚本连接按钮信号

在Godot中为实例化的按钮连接pressed信号

方式一:从按钮场景实例化并绑定信号

假设你已经有一个独立的按钮场景(比如路径为res://ButtonScene.tscn),在主场景的脚本中按以下步骤操作:

  1. 先加载按钮场景资源:
# 主场景脚本(如Main.gd),挂在主节点上
@onready var button_scene = load("res://ButtonScene.tscn")
  1. 在主场景加载完成时实例化按钮,并连接信号:
func _ready():
    # 实例化按钮对象
    var new_button = button_scene.instantiate()
    # 可选:设置按钮的位置、文本等属性
    new_button.position = Vector2(100, 100)
    new_button.text = "点击触发"
    # 连接pressed信号到处理函数
    new_button.pressed.connect(_on_button_pressed)
    # 将按钮添加到主场景的节点树中
    add_child(new_button)
  1. 编写信号处理逻辑:
func _on_button_pressed():
    print("按钮被点击了!")
    # 在这里编写你的业务逻辑,比如弹窗、切换场景等

方式二:直接用代码生成按钮并绑定信号

如果不需要单独的按钮场景,直接通过代码创建按钮:

func _ready():
    # 创建Button节点实例
    var new_button = Button.new()
    new_button.position = Vector2(200, 200)
    new_button.text = "动态生成按钮"
    # 连接信号到处理函数
    new_button.pressed.connect(_on_dynamic_button_pressed)
    # 将按钮加入节点树
    add_child(new_button)

func _on_dynamic_button_pressed():
    print("动态按钮被触发!")

进阶:给不同按钮绑定差异化逻辑

如果需要每个实例化的按钮执行不同逻辑,可以通过匿名函数传递参数:

func _ready():
    for i in range(3):
        var new_button = Button.new()
        new_button.position = Vector2(100, 100 + i*50)
        new_button.text = f"按钮{i+1}"
        # 用匿名函数绑定带参数的处理逻辑
        new_button.pressed.connect(func():
            _on_specific_button_clicked(i+1)
        )
        add_child(new_button)

func _on_specific_button_clicked(button_num):
    print(f"第{button_num}个按钮被点击")

内容的提问来源于stack exchange,提问作者AbsolutePickle42

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 03:12:36