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