2 Stimmen

Korrektes Erkennen des Tastendrucks für den Chat in XNA

Ich komme gleich zur Sache: Ich versuche, ein Chatsystem für ein XNA-Spiel zu entwickeln, das ich gerade mache. Ich kann leicht herausfinden, welche Tasten gedrückt werden BUT Ich habe keine Möglichkeit zu wissen, was tatsächlich getippt wird. Für mich sieht es so aus, als ob sie sagen würden: OemShifthello billOemPeriod OemShifthow are youOemQuestion die wie folgt aussehen sollte Hello bill. How are you? (oder etwas in dieser Richtung).

Wie geht man am besten mit all dem um?

4voto

George Clingerman Punkte 1385

Für den PC ist nichts in das XNA-Framework eingebaut, was das einfach macht (bei WP7 und der Xbox ist das anders).

Dieser Beitrag hier fasst so ziemlich alle Ihre Möglichkeiten ziemlich gut zusammen.

http://dream-forever.net/Blog/2011/08/29/getting-true-keyboard-input-into-your-xna-games/

Grundsätzlich

  1. Erstellen Sie ein umfangreiches Wörterbuch mit Zuordnungen von Zeichen zu Tastendrücken
  2. Einhaken in die XNA Game Forms KeyDown, KeyUp, KeyPress Ereignisse
  3. Verwenden Sie die IMessageFilter-Schnittstelle
  4. Verwenden Sie SetWindowsHookEx, um die Tastenereignisse zu erfassen

Jede dieser Methoden hat ihre Vor- und Nachteile, und der Autor des Beitrags hat ein Beispiel zum Herunterladen bereitgestellt.

Bei meinen Recherchen bin ich auch auf eine Bibliothek von Nuclex gestoßen. Sie entwickeln in der Regel ziemlich robuste Lösungen, so dass es sich auf jeden Fall lohnt, auch diese zu prüfen.

http://www.nuclex.org/blog/announcements/105-new-component-nuclex-input

Wichtig ist, dass Sie auf dem PC arbeiten und dass wirklich JEDE Bibliothek funktioniert, die es gibt (mit einigen Modifikationen). Beschränken Sie sich also nicht nur auf XNA-bezogene Beispiele. Samples für DirectInput, SlimDX, SharpDX usw. wären auch Optionen, sie können nur ein wenig zusätzliche Arbeit, um in Ihr Projekt Drop nehmen.

2voto

neeKo Punkte 4260

Die einfache Lösung, die ich verwendet habe, war, eine Verbindung zur Win32-Tastatur herzustellen und Windows übersetzen zu lassen, was auch immer getippt wird. Es ist auf meinem anderen Computer, aber seine im Grunde mit dieser Lösung auf Gamedev.net . (Beitrag Nr. 10)

Das Erstaunliche ist, wenn Sie [DllImport("user32.dll", CharSet=CharSet.Unicode)] (der CharSet-Teil aller .dll-Importe), können Sie lokalisierte Eingaben von Ihrer Tastatur erhalten!

Also platzieren Sie dies irgendwo, registrieren Sie die Ereignisse in Initialize, und das war's! Hoffentlich funktioniert es für Sie.

編集部

Diese ganze Win32-Sache mag einschüchternd wirken, aber lassen Sie sich davon nicht abhalten - es ist nur eine Frage von Copy-Paste, und Sie können es in buchstäblich 2 Minuten perfekt zum Laufen bringen.

1voto

Lucius Punkte 3697

Ich vermute, Sie fragen die Tastatureingabe über keyState.GetPressedKeys() ?

Sie müssen eine switch Anweisung irgendwo in Ihrem Code, um die Mitglieder der Keys Enum in tatsächliche Zeichen umzuwandeln. Die ToString() Methode funktioniert gut mit Buchstaben, aber nicht mit den Symbolen, da diese mit Namen angegeben werden.

switch (keyPressed)
{
    case Keys.OemPeriod :
        character = '.';
        break;
    case Keys.OemQuestion :
        character = '?';
        break;

    // More cases
}

Aber Vorsicht, die Tastaturen sind anders. Wie Sie richtig festgestellt haben: Taste != Symbol. Einige Tasten auf anderer Hardware sind vielleicht mit einem ganz anderen Symbol verbunden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X