Как узнать, выпустил ли пользователь слайдер

На github есть проблема, чтобы добавить сигнал release () к узлу слайдера, но как бы я сделал то же самое без него?

Я хочу иметь ползунок, и когда пользователь перемещает его, он говорит "Значение теперь X" на метке на экране. Но когда я делаю это на основе 'value_changed(x)', он вызывает много раз, пока движется слайдер. Я хочу, чтобы он устанавливал мою единственную метку, когда игрок отпускает после скольжения, или когда нажимает и отпускает область в диапазоне ползунка, чтобы выбрать новое значение без использования граббера.

2 ответа

Хорошо, это то, что я придумал. Он буквально не дает мне знать, когда слайдер выпущен, но он говорит мне, когда игрок прекращает редактировать слайдер. Он по-прежнему посылает предупреждение, если вы сделаете небольшую паузу, но это нормально для моей игры. Он не отправляет непрерывные оповещения, например, если вы просто используете _on_HSlider_value_changed(), чего я и хотел избежать.

var old = self.value #start value of slider
var timer_on = false

#will be called continuously while editing timer
func editing_slider(new):

    #only start a timer, if there isn't one already or you'll have a million
    if not timer_on:

        #start timer
        timer_on = true
        yield(get_tree().create_timer(.2), "timeout" )
        timer_on = false

        #if still editing, re call function
        if old != new:
            editing_slider(new)

        #done editing
        else: 
            print("slider set to " + str(value))


    old = new


func _on_HSlider_value_changed(value):
    editing_slider(value)

Если вы хотите избежать вызова оповещения, когда пользователь делает паузу, но не отпустил, вам нужно выполнить какую-то проверку InputEvent.

Вы можете достичь того, чего хотите, переопределив функцию _gui_input. Прикрепите скрипт к ползунку, а затем добавьте этот код:

func _gui_input(event):
    if (event is InputEventMouseButton) && !event.pressed && (event.button_index == BUTTON_LEFT):
        print("Released")

Это будет работать независимо от того, освобождает ли пользователь граббер или "освобождает область в диапазоне ползунка, чтобы выбрать новое значение без использования граббера", и достигает того, чего вы хотите. Однако, если код предназначен для запуска на устройстве с клавиатурой (например, на ПК), пользователь также может изменить значение с помощью клавиш курсора на клавиатуре, и вы можете добавить поддержку для этого.

Другие вопросы по тегам