Detectar movimiento y dirección del mouse en Godot
Estoy creando settings menu
un juego en Godot 3.5 que tiene un progress bar
nodo para el volumen.
Quiero que los jugadores arrastren el mouse para ajustar el volumen, así:
El problema es que no sé cómo detectar dónde y cuánto se mueve el mouse para cambiar el valor de la barra de progreso en consecuencia. Me preguntaba si había una manera de detectar y medir el movimiento del mouse cuando ingresa a un nodo.
Intenté usarlo , get_global_mouse_position()
lo almacené en una variable, usé un temporizador para un retraso y luego lo revisé nuevamente, luego restando ambos, pensé que obtendría el movimiento del mouse pero no funcionó y la barra de progreso permaneció igual.
Aunque, incluso si hubiera funcionado, no habría sido fluido ni cambiante en tiempo real...
Espero que te guste ayudar, ¡GRACIAS!
Recomiendo usarlo HSlider
para la configuración de volumen.
Ya que quieres usar un ProgressBar
...
Una forma de hacer esto sería mediante _gui_input
un script adjunto a ProgressBar
:
func _gui_input(event:InputEvent) -> void:
var mouse_event := event as InputEventMouse
if mouse_event != null:
if mouse_event.button_index == BUTTON_LEFT and mouse_event.pressed:
prints(mouse_event.position)
Aquí lo que position
obtendrías estaría en el espacio local del ProgressBar
.
Podríamos calcular el valor a partir de x
( position.x
) y width
( rect_size.x
):
x value - min_value
------- = -----------------------
width max_value - min_value
=>
x
(max_value - min_value) ------- = value - min_value
width
=>
value = min_value + (max_value - min_value) * x / width
Nota : tenga en cuenta que el cálculo anterior no tiene en cuenta los bordes.
Anexo : Noto que preguntas explícitamente "cuánto se mueve el mouse". Bueno, si event
es un InputEventMouseMotion
, tiene una relative
propiedad que le dirá cuánto se movió desde el último evento.