Mausziel in einem FPS


38

Ich möchte einen Ego-Shooter machen und die Kamera mit der Maus bewegen. Das Problem ist, dass sich die Kamera nicht mehr dreht, wenn der Cursor die Grenzen des Bildschirms erreicht. Wie kann ich die Maus trotzdem zentriert halten und ihre Bewegungen erkennen?


3
Das ist eine gute Frage.
Die kommunistische Ente

Antworten:


39

Die allgemeine Vorgehensweise bei der klassischen Win32-Programmierung besteht darin, das Maus-Delta für jeden Frame zu erfassen und dann die Mausposition auf die Mitte des Bildschirms zurückzusetzen. Sie möchten natürlich auch den Mauszeiger unsichtbar machen, da sonst die Dinge hässlich aussehen.

Sie können dasselbe in XNA tun, Sie arbeiten nur mit einer etwas anderen Oberfläche. Sie könnten also etwas tun wie:

  1. Stellen Sie beim Start die Mausposition mit Mouse.SetPosition auf die Bildschirmmitte ein .
  2. Machen Sie die Maus auch beim Start unsichtbar .
  3. Erfassen Sie in jedem Eingaberahmen den aktuellen Mausstatus .
  4. Da Sie wissen, dass sich die Maus in der Mitte befindet, können Sie die aktuellen X- und Y-Werte des in Schritt 3 wiederhergestellten MouseState- Objekts verwenden, um die Delta-Bewegung in beiden Dimensionen zu berechnen. Sie können diese Deltas an den Rest Ihrer Spielelogik weitergeben, z. B. (in Ihrem Fall) den Kameracode.
  5. Setzen Sie die Maus in die Mitte des Bildschirms zurück, bevor Sie mit dem nächsten Bild fortfahren.

BEARBEITEN: Außerdem ist hier ein Tutorial, das ich über eine Google-Suche nach "XNA relative mouse input" ausgegraben habe (was Sie fragen). Es ist ein bisschen alt, denke ich, so dass einige der Methoden ihre Namen geändert haben, aber die Konzepte sollten immer noch gelten.

BEARBEITEN 2: Bedeutet, dass "dies in Win32 behandeln" und nicht "dies ist Win32 behandeln", entsprechend aktualisiert.


Vielen Dank. das ist genau das, wonach ich gesucht habe! ;)
BlackBear
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.