github上有一个问题是向滑块节点添加一个已释放的()信号,但如果没有它,我该如何做同样的事情呢?
我想要一个滑块,当用户移动它时,它会在屏幕上的标签上显示“Value is now X”。但是当我基于'value_changed(x)'执行它时,它会在拖动滑块时多次调用。我希望它在玩家滑动后释放时,或者当按下并释放滑块范围内的区域以选择新值而不使用抓取器时设置我唯一的标签。
答案 0 :(得分:0)
好的,这就是我想出来的。当滑块被释放时,它不会让我知道,但它会告诉我播放器何时停止编辑滑块。如果你暂停一下,它仍会发出警报,但这对我的游戏来说没问题。它不会发送连续警报,就像你只是使用_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检查。
答案 1 :(得分:0)
您可以通过覆盖_gui_input函数来实现所需的功能。将脚本附加到滑块上,然后添加以下代码:
func _gui_input(event):
if (event is InputEventMouseButton) && !event.pressed && (event.button_index == BUTTON_LEFT):
print("Released")
无论用户释放抓取器还是“释放滑块范围上的区域以选择新值而不使用抓取器”,这都将起作用,并实现您想要的。但是,如果代码打算在带有键盘的设备(例如PC)上运行,则用户也可以通过键盘上的光标键更改该值,并且您可能还希望添加对此的支持。>