Detectar movimiento y dirección del mouse en Godot

Resuelto CosmicFlaw asked hace 7 meses • 0 respuestas

Estoy creando settings menuun juego en Godot 3.5 que tiene un progress barnodo para el volumen.
Quiero que los jugadores arrastren el mouse para ajustar el volumen, así:
imagen de la barra de volumen

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!

CosmicFlaw avatar Feb 16 '24 19:02 CosmicFlaw
Aceptado

Recomiendo usarlo HSliderpara la configuración de volumen.


Ya que quieres usar un ProgressBar...

Una forma de hacer esto sería mediante _gui_inputun 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 positionobtendrí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 eventes un InputEventMouseMotion, tiene una relativepropiedad que le dirá cuánto se movió desde el último evento.

Theraot avatar Feb 16 '2024 14:02 Theraot