Maus und Eingabe Koordinaten

Über

Der Grund für diese kleine Anleitung besteht darin, viele häufige Fehler in Bezug auf Eingabekoordinaten, ermitteln der Mausposition und Bildschirmauflösung usw. zu beseitigen.

Hardware-Anzeigekoordinaten

Die Verwendung von Hardwarekoordinaten ist sinnvoll, wenn komplexe Benutzeroberflächen geschrieben und auf einem PC ausgeführt werden sollen, z.B. Editoren, MMOs, Tools usw. Außerhalb dieses Anwendungsbereichs ist dies jedoch weniger sinnvoll.

Anzeigekoordinaten des Ansichtsbereichs

Godot verwendet Ansichtsfenster zum Anzeigen von Inhalten, und diese können durch verschiedene Optionen skaliert werden (siehe Mehrere Auflösungen). Verwenden Sie dann die Funktionen im Node, um die Mauskoordinaten und die Größe des Ansichtsfensters zu erhalten, zum Beispiel:

func _input(event):
   # Mouse in viewport coordinates.
   if event is InputEventMouseButton:
       print("Mouse Click/Unclick at: ", event.position)
   elif event is InputEventMouseMotion:
       print("Mouse Motion at: ", event.position)

   # Print the size of the viewport.
   print("Viewport Resolution is: ", get_viewport_rect().size)
public override void _Input(InputEvent @event)
{
    // Mouse in viewport coordinates.
    if (@event is InputEventMouseButton eventMouseButton)
        GD.Print("Mouse Click/Unclick at: ", eventMouseButton.Position);
    else if (@event is InputEventMouseMotion eventMouseMotion)
        GD.Print("Mouse Motion at: ", eventMouseMotion.Position);

    // Print the size of the viewport.
    GD.Print("Viewport Resolution is: ", GetViewportRect().Size);
}

Alternativ können Sie das Ansichtsfenster nach der Mausposition fragen:

get_viewport().get_mouse_position()
GetViewport().GetMousePosition();

Bemerkung

When the mouse mode is set to Input.MOUSE_MODE_CAPTURED, the event.position value from InputEventMouseMotion is the center of the screen. Use event.relative instead of event.position and event.speed to process mouse movement and position changes.