Как узнать, выпустил ли пользователь слайдер - PullRequest
0 голосов
/ 08 июня 2018

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

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

Ответы [ 2 ]

0 голосов
/ 04 августа 2018

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

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

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

0 голосов
/ 14 июня 2018

Хорошо, это то, что я придумал.Он буквально не дает мне знать, когда слайдер выпущен, но он говорит мне, когда игрок перестает редактировать слайдер.Он по-прежнему посылает предупреждение, если вы сделаете небольшую паузу, но это нормально для моей игры.Он не отправляет непрерывные оповещения, например, если вы просто используете _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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...