Text-Eingabe in XNA (für Eingabe von Namen, chatten)
Ich versuche, umzusetzen Tastatur Texteingabe für den Chat im Spiel, Charakter-Namen eingeben, speichern, Datei, name, etc.
Ich war Herumspielen mit KeyboardState versuchen zu Holen Sie sich die neueste Hinzugefügt-symbol zu übersetzen in Zeichen, die ich hinzufügen könnte, um meine input-string, aber es scheint zu Sortieren das array von aktuell gedrückten Tasten in einer bestimmten Reihenfolge (ich Wette, es sortiert keycode), so kann ich nicht leicht zu finden, welche Taste gedrückt wurde zuletzt hinzufügen, dass es zu input-string.
Gibt es eine einfache Möglichkeit zu erkennen, der letzten gedrückten text-Taste (einschließlich Situationen, wenn mehrere Tasten gedrückt werden, weil die Menschen das auch manchmal), oder ist es einfacher zu machen, verwenden Sie einige der vorhandenen Lösungen?
Studiere ich C# und XNA, also ich möchte in der Lage, es selbst zu tun, aber am Ende will ich meinem Spiel zu arbeiten.
InformationsquelleAutor user1306322 | 2012-04-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Damit die Texteingabe, die Sie kennen müssen, wenn eine Taste gedrückt wird oder freigegeben ist. Leider, das XNA ist KeyboardState nicht wirklich helfen mit diesem, so haben Sie es selbst zu tun. Im Grunde brauchen Sie nur zu vergleichen mit den aktuellen Updates PressedKeys mit der PressedKeys aus dem vorherigen update.
Geben, Ihre Spiel-Klasse eine KbHandler, und rufen Sie die Update-Methode aus dem Game-update-Methode.
(BTW es ist wohl eine mehr effiziente Art und Weise zu vergleichen, zwei arrays als mit foreach und Enthält, aber mit so wenigen Elementen zu vergleichen, ich bezweifle es, ist egal.)
InformationsquelleAutor ChimeraObscura
Könnten Sie versuchen, das Beispiel aufgeführt hier
Dieser wird in der Lage mehrere Tasten gleichzeitig gedrückt werden. Wenn Sie vermeiden möchten, fügen Sie ein
else
vor dem zweitenif
(und die folgenden)Auch, eine Taste gedrückt gehalten wird Feuer mehrere key-down-Ereignisse-wenn dies nicht gewünscht ist, wird die Notwendigkeit der Einführung einer state-variable, die Sie drehen, wenn die Taste gedrückt ist und Wann nicht und Sie gehen entsprechend seinen Zustand, wenn die Taste ist gedrückt
Klar, Sie können Lesen, die anderen auch: MSDN, z.B.
Keys.A
stattKeys.Left
Ich vermutete, Sie meinte, dass, und es ist nicht sehr cool, geben Sie eine explizite Szenario für jeden möglichen Fall, und es gibt eine Menge von Fällen, in ascii, geschweige denn unicode. Weißt du einen anderen Weg?
Sie können die skizzierten Ansatz in das Gespräch. Im Grunde, verwenden Sie die
toString()
Methode konvertieren Sie die Taste gedrückt, um den Wert (anstelle von einzelnenif
s). Sie haben zu-Griff (inkl. wirf) die besonderen Tasten, die entweder besonderen Sinn oder keinen Sinn machen, von einer Eingabe Standpunkt (z.B. backspace oder ESC)Aber wie bekomme ich nur einen neuen Schlüssel? Ich meine, wenn ich versuche, immer alle Tasten gedrückt, derzeit sind Sie nicht sortiert in der Reihenfolge zu drücken, so kann ich nicht nur nehmen, letzten index des Arrays.
InformationsquelleAutor Attila