Einfache Texteingabe mit XNA

Mit dem neuen Syntax Highlighter(siehe letzter Post) kann ich das hier ja auch mal veröffendlichen:

Wer sich mit XNA beschäftigt, wird irgendwann feststellen, das es keine Möglickeit gibt den Benutzer seinen Namen o. ä. eingeben zu lassen. Im Internet findet man nur aufgeblähten Code mit Lookup Tabellen.

Von Microsoft gibt es eine Möglichkeit:

Guide.BeginnKeyBoardInput()

Aber die zerstört doch das Layout eines Spiel arg.(Am PC noch mehr als an der XBOX 360) Also war mal wieder Handarbeit gefragt!

Die im folgenden vorgestellte Komponente kann ohne Problem verwendet werden, auch in kommerziellen Produkten. Ich würde im aber in jedem Fall über einen Kommentar freuen!

Als erstes brauchen wir ein paar Variablen:

Keys lastKey = Keys.None;
public string InputText = "";

Dann das Herstück der Komponente: Die Update Methode:

public override void Update()
{
if (Keyboard.GetState().IsKeyUp(lastKey))
{
lastKey = Keys.None;
}
if (Keyboard.GetState().GetPressedKeys().Length > 0 && lastKey == Keys.None)
{
lastKey = Keyboard.GetState().GetPressedKeys()[0];
if (lastKey == Keys.Back)
{
if (InputText.Length != 0)
InputText = InputText.Substring(0, InputText.Length - 1);
}
else if (InputText.Length < 25)
{
InputText += (char)lastKey.GetHashCode();
}
}

In diesem Code befinden sich einige interessante Stellen:

Zum einen wird mit lastKey immer die zuletzt gedrückte Taste gespeichert, dass verhindert, dass die Taste mehrfach ausgewertet wird.

Dann wird noch getestet, ob die Löschen Taste gedrückt wurde. Ist das der Fall, wird mit Substring das letzte Zeichen gelöscht. Dann noch eine if Abfrage, die verhindert, dass man mehr als 25 Zeichen eingibt.

Dann kommt der eigentliche Trick:

InputText += (char)lastKey.GetHashCode();

Dise Zeile Code macht aus den Tasten richtigen Text. Denn die Hash Funktion von „Keys“ ist so überschrieben, das sie den ASCII-Wert der Taste zurück gibt! Würde man Keys.ToString() verwenden, würde man bei Zahlen D4 o. ä. bekommen.

Damit ist die Komponente auch schon fertig. Es gibt zwar noch keine Darstellung, aber das sollte jeder selber hinbekommen!

Einen einzigen Bug gibt es leider: Man kann nur klein schreiben. Zwar ist durch addieren von 36 zum Hashwert auch Großschrift möglich, aber dann halt nur! Wer Lust hat kann sicher dieses Manko noch ausbügeln.

Trotzdem hoffe ich das euch die Grundidee gefällt, denn Texteingabe ist wirklich schwerer als man denkt mit XNA!

Update: Wer noch testen will, das die Benutzer nur Zahlen und Buchstaben eingeben (weil Steuerzeichen auch auswertet würden) kann dies mit Char.IsLetterOrDigit() lösen.

Ein Gedanke zu „Einfache Texteingabe mit XNA

  1. Hallo Niklas,

    dieses Tutorial war genau das, was ich gesucht habe. Aber du hast noch einen kleinen Fehler drin: Man muss nicht 36 sondern 32 zu dem Hashwert addieren, um Kleinbuchstaben zu erhalten.

    Manuel

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.