Godot 4:通过代码生成单选按钮数组并将它们链接到自定义信号

问题描述 投票:0回答:2

尝试让单选按钮按下操作导致按钮的编号被打印到控制台。当前代码只打印“Button #_of_highest_button was pressed”,而不管实际按下的是哪个按钮。问题出在我设置信号的方式上,但我想不通。

signal button_pressed

func create_radio_button_matrix():
    var row_count = len(Global.players) - 1
    var index = Global.players.find(Global.active_player)
    var players = Global.players.duplicate()
    players.pop_at(index)
    for player in players:
        for row in row_count:
            group = ButtonGroup.new()
            for col in 4:
                button = Button.new()
                gray_foreground.add_child(button)
                button.set_button_group(group)
                button.position = Vector2(200 + 100 * col, 150 + 35 * row)
                button.size = Vector2(95, 20)
                button.toggle_mode = true
                button.action_mode = BaseButton.ACTION_MODE_BUTTON_PRESS
                button.text = str(row * 4 + col)
                button.pressed.connect(_on_button_pressed)
                if col == 1:
                    button.set_pressed_no_signal(true)


func _on_button_pressed():
    print("Button " + button.text + " was pressed.")
radio-button godot
2个回答
0
投票

看起来问题出在 _on_button_pressed 函数上。 “按钮”在函数上下文中不存在 您需要向 _on_button_pressed 函数添加一个参数,该函数将接收被按下的按钮对象


0
投票

看来我需要使用lambda函数。最终代码是:

button.pressed.connect(func():_on_button_pressed(button))
func _on_button_pressed(button):
    print("Button " + button.text + " was pressed.")
© www.soinside.com 2019 - 2024. All rights reserved.